业务需求:登录卖家后台管理系统导出每月的订单数据
在使用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)
2, 登录某宝后台是仅仅使用上面的基础配置是登录不上去的
- # 设置为开发者模式,防止网站识别
- 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})""",
- })
- 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)
后续是输入用户名和密码,点击登录操作,可能首次可以成功登录,但是几次之后点击登录操作时出现以滑块验证,不过还好这个滑块验证不是图片滑块验证,是一拖到底的那种,,应该不难?又是一顿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,在一划到底。。终于暂时解决了。。
对于这种反爬措施很强的网站没有什么是能确保百分百解决问题,任何方法都有其局限性,在一定的时间和空间有效,爬虫与反爬虫本就是相互对抗,相互促进的矛盾事物。这里我使用自动化技术来解决一些重复枯燥的流程化东西,分享目的不是去破坏。