• selenium模拟登录某宝


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

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

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

    解决思路:

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

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

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

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

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

     问题2:非图片滑块验证

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

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

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

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

    总结:

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

  • 相关阅读:
    【Ant Design Table + React】表格列伸缩实现
    bit、bin 、mcs文件区别
    FPGA时序分析与约束(7)——通过Tcl扩展SDC
    李沐:机器学习者进阶学习建议
    Java中DateTimeFormatter的使用方法和案例
    8 ActiveMQ的持久化
    盘点52个Python各行各业管理系统源码Python爱好者不容错过
    1万属性,100亿数据,每秒10万吞吐,架构如何设计?
    svn log 高级命令解释
    js关于字符串的常用方法总结
  • 原文地址:https://blog.csdn.net/weixin_44007111/article/details/126191215