selenium模拟登录某宝

  • Post author:
  • Post category:其他


问题1:网站监测自动化程序

业务需求:登录卖家后台管理系统导出每月的订单数据

在使用selenium模拟登录某宝后台时出现监测是否使用自动化操作,出现登录失败的情况

解决思路:

在网上搜索了一下解决办法,这里记录一下

1, 个人使用selenium网页自动化操作的最开始配置

import webbrowser
from selenium import webdriver
from selenium.webdriver.common.by import By

webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(CHROME_PATH))
chromeOptions = webdriver.ChromeOptions()
prefs = {"download.default_directory": DOWNLOAD_PATH}
chromeOptions.add_experimental_option("prefs", prefs)
chrome_browser = webdriver.Chrome(chrome_options=chromeOptions)
  • CHROME_PATH参数时本地谷歌浏览器的chrome.exe地址,个人使用过程中这个感觉没必要【可能是我默认浏览器就是chrome】
  • DOWNLAD_PATH参数是自动化过程中浏览器的默认下载路径,这个根据需要进行配置

2, 登录某宝后台是仅仅使用上面的基础配置是登录不上去的

  • 设置开发者模式,防止网站识别
  • 通过浏览器的dev_tool在get页面将.webdriver属性改为”undefined”
# 设置为开发者模式,防止网站识别
chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
chrome_browser = webdriver.Chrome()
# 通过浏览器的dev_tool在get页面将.webdriver属性改为"undefined"
chrome_browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})""",
})
  • 我也不知道啥原理,加上上面二步还是出现问题,
  • 打开URL后还需要执行一个JS脚本
chrome_browser.implicitly_wait(10)
url = 'https://login.taobao.com/'
chrome_browser.get(url)
chrome_browser.maximize_window()
time.sleep(1)
js = "window.navigator.webdriver=false"
chrome_browser.execute_script(js)
time.sleep(2)
  • 说明:测试过程发现,执行过上面步骤后前面自定义的下载路径失效,默认下载路径变成本地浏览器中设置的。

问题2:非图片滑块验证

后续是输入用户名和密码,点击登录操作,可能首次可以成功登录,但是几次之后点击登录操作时出现以滑块验证,不过还好这个滑块验证不是图片滑块验证,是一拖到底的那种,,应该不难?又是一顿CSDN,终于解决了。。

try:
    # 切换框架
    chrome_browser.switch_to.frame("baxia-dialog-content")
    # 定位到滑块按钮元素
    ele_button = chrome_browser.find_elements(By.XPATH, "//span[@id='nc_1_n1z']")[-1]
    # 定位到滑块区域元素
    ele = chrome_browser.find_elements(By.XPATH, "//span[contains(text(), '最右边')]")[-1]
    # 拖动滑块
    ActionChains(chrome_browser).drag_and_drop_by_offset(ele_button, ele.size['width']/2,         
    ele.size['height']).perform()
    time.sleep(1)
    ActionChains(chrome_browser).drag_and_drop_by_offset(ele_button, ele.size['width'], ele.size['height']).perform()
    time.sleep(2)
except:
    logger.info(f"没有滑块验证")
logger.info("登录成功...")

滑块问题OK啦??NO!测试很多次都可以正常登录,但是使用此时多的时候发现滑动太快也会被监测出来,,尼玛。。

难不倒我,,不是滑动太快吗,,我先滑动一般,松开,休眠1S,在一划到底。。终于暂时解决了。。

总结:

对于这种反爬措施很强的网站没有什么是能确保百分百解决问题,任何方法都有其局限性,在一定的时间和空间有效,爬虫与反爬虫本就是相互对抗,相互促进的矛盾事物。这里我使用自动化技术来解决一些重复枯燥的流程化东西,分享目的不是去破坏。



版权声明:本文为weixin_44007111原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。