我就问你为啥要破解图形验证码、滑块验证码登录?就为了上去点个赞、发个文?|Python 主题月

微信截图_20210708140109.png

本文正在参加「Python主题月」,详情查看 活动链接

疑问

  • 这到底算不算是一个问题?
出于何种考虑,非得要去破解验证码、滑块验证码登录?
复制代码
  • 首先,本人并不认为这是一个问题,或者叫技术难点<不难,coding解决方案,全网可查>!!!
在测试人员面前,能去实现这个问题,就是能力的提现?
不是,我们的目的是测试,而不是要去花大量的时间来‘制造’这个问题。
复制代码

方案

方案一
都说测试的目的不是花大量时间来‘制造’问题,那么就去沟通,让技术人员干掉这个功能,岂不皆大欢喜?
复制代码
方案二
同方案一的就不多说了,无非就是干掉和让功能失效;
下面的方案就叫使用cookie绕过登录:大致意思是手动登录,拿到浏览器保存的登录cookie信息<小饼干>,再放入代码中实现操作。
复制代码
方案三
  • 这只能叫秀儿,没法儿,大多数IT人都会去做的一件事情,没人愿意去沟通,那就让我们用代码实现吧。

实现方案二

  • 先准备Python+selenium+eclipse本地开发环境
  • 要求测试人员懂点基础代码,本人以Python为例:
思路已经在上面讲了,说干就干
复制代码
  • 写好基础代码
from selenium import webdriver
from time import sleep

# 创建对象
driver=webdriver.Chrome()
driver.implicitly_wait(30)
driver.maximize_window()

# 打开掘金网址
driver.get("https://juejin.cn/")
# 点击写文章
driver.find_element_by_xpath("//button[@class='add-btn']").click()
# 为了表示截的图是执行脚本产生的,先输入数据
driver.find_element_by_name("mobile").send_keys("我是执行脚本的结果")
# 因为没有登录,必然会出现登录框,为了保存证据,先截个图
driver.save_screenshot("login.png")
sleep(1)

# 习惯关闭driver驱动
driver.quit()
复制代码
  • 再看截图(为了证明,作者也是煞费苦心)

login.png

  • 现在轮到手动去登录把cookie信息拿下来了
F12一开,什么都不是问题
cookie可以从application的Cookie中拿,也可以去network的任意juejin请求头中拿cookie
复制代码

image.png

  • 拿到之后呢,就去代码里添加即可
from selenium import webdriver
from time import sleep

# 创建对象
option=webdriver.ChromeOptions()
option.add_argument('--start-maximized')
driver=webdriver.Chrome(options=option)
driver.implicitly_wait(30)

# 打开掘金地址
driver.get("https://juejin.cn/")

# 这是手动捕捉的cookie;浏览器的F12,cookie的那部分全部,或者是network任意掘金请求的cookie
cookie=[{'domain': 'juejin.cn', 'expiry': 1657263267, 'httpOnly': False, 'name': 'tt_scid', 'path': '/', 'secure': False, 'value': 'dBWWtxewU2323E3h2BNLVLk4.JlsQESlaKLE0-WhIuDJIuOK1D2D323Sug819a'}, {'domain': '.juejin.cn', 'expiry': 1633503267, 'httpOnly': False, 'name': 'MONITOR_WEB_ID', 'path': '/', 'secure': False, 'value': 'fe97cd76-9ab6-49e2-96f8-598566df70ef'}, {'domain': '.juejin.cn', 'expiry': 16326095266, 'httpOnly': True, 'name': 'n_mh', 'path': '/', 'secure': False, 'value': 'd5W33G2X2hXeGu0Ggg-fNK-ov5_S_2pHUYxNwUIs_U'}, {'domain': '.juejin.cn', 'expiry': 1630911266, 'httpOnly': True, 'name': 'sessionid_ss', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '26526275e97c23a531657989dd922d0f9c3'}, {'domain': '.juejin.cn', 'expiry': 1630911266, 'httpOnly': True, 'name': 'sessionid', 'path': '/', 'secure': False, 'value': '2652675e293365279289dd922d0f9c3'}, {'domain': '.juejin.cn', 'expiry': 1630911266, 'httpOnly': True, 'name': 'sid_tt', 'path': '/', 'secure': False, 'value': '2652675e97c3a52333d92d0f9c3'}, {'domain': '.juejin.cn', 'expiry': 1630911266, 'httpOnly': True, 'name': 'uid_tt', 'path': '/', 'secure': False, 'value': '69ee1a6b20c8c7ccf0d11e4290b1ed1'}, {'domain': '.juejin.cn', 'expiry': 1630911266, 'httpOnly': True, 'name': 'uid_tt_ss', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '69ee1a6b0c8c7ccf0d13574e490b1ed1'}, {'domain': '.juejin.cn', 'expiry': 1656831266, 'httpOnly': True, 'name': 'sid_guard', 'path': '/', 'secure': False, 'value': '26526752e97c3a531657989d229c3%7C1625727266%7C15184000%7CMon%2C+06-Sep-2021+062%3A54%3A26+GMT'}, {'domain': '.juejin.cn', 'expiry': 1630911256, 'httpOnly': False, 'name': 'passport_csrf_token_default', 'path': '/', 'secure': False, 'value': '2dc015e17fd727f271c422f65b112b83ec'}, {'domain': '.juejin.cn', 'expiry': 1625813667, 'httpOnly': False, 'name': '_gid', 'path': '/', 'secure': False, 'value': 'GA1.2.3134962563.1625727249'}, {'domain': '.juejin.cn', 'expiry': 1688799267, 'httpOnly': False, 'name': '_ga', 'path': '/', 'secure': False, 'value': 'GA1.2.86874112136.1625727249'}, {'domain': 'juejin.cn', 'httpOnly': False, 'name': 's_v_web_id', 'path': '/', 'secure': False, 'value': 'verify_kquk17pb_m0kzTiE8_XhZj_421My_97SN_QPs7c3mtpnxE'}, {'domain': '.juejin.cn', 'expiry': 16309121256, 'httpOnly': False, 'name': 'passport_csrf_token', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '2dc015e17fd77f21712c422f65b11b83ec'}, {'domain': 'juejin.cn', 'expiry': 1657263248, 'httpOnly': False, 'name': 'ttcid', 'path': '/', 'secure': False, 'value': 'b0165937cfa542387940da1d7a29b5290452'}]

# 遍历加入cookie
for cook in cookie:
    driver.add_cookie(cook)

# 刷新当前窗口
driver.refresh()
    
# 点击写文章
driver.find_element_by_xpath("//button[@class='add-btn']").click()

# 为了表示截的图是执行脚本产生的,先输入数据
# driver.find_element_by_name("mobile").send_keys("我是执行脚本的结果")
# 因为没有登录,必然会出现登录框,为了保存证据,先截个图
# driver.save_screenshot("login.png")

# 写标题
driver.find_element_by_xpath("//input[@class='title-input title-input']").send_keys("我是标题")
sleep(1)
# 写内容
ele=driver.find_element_by_xpath("//div[@class='CodeMirror cm-s-default CodeMirror-wrap']")
driver.execute_script("arguments[0].CodeMirror.setValue(arguments[1]);", ele, "写东西123")
 
sleep(1)
# 点击草稿箱
driver.find_element_by_xpath("//button[contains(text(),'草')]").click()
# 查看草稿箱截图
sleep(3)
# 习惯关闭driver驱动
driver.quit()
复制代码
  • 然后你就可以在草稿箱看到刚刚输入的内容了

结论

  • 使用cookie是不是也能实现达到你不为人知的目的?
还有告诉你个秘密,如果一个系统的没有做单设备登录,那么它的cookie就可以是N多个且不失效。
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享