发布时间:2020-01-20 18:14:59编辑:Run阅读(12672)
目标网站:aliexpress(全球速卖通)阿里国际站
登录url : https://login.aliexpress.com/

python selenium 输入用户名,密码 拖动滑块验证,因为这个不涉及到缺口,理论上是很简单的
配置好selenium的环境:
pip install selenium
下个对应google浏览器版本的chromedriver驱动,放在python安装目录下(win环境)

第一次尝试的代码:
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
def selenium_login_alibaba(self, url):
    option = webdriver.ChromeOptions()
    option.add_argument('--start-maximized')
    browser = webdriver.Chrome(chrome_options=option)
    browser.delete_all_cookies()
    browser.get(url)
    try:
        # 隐式等待
        time.sleep(2)
        browser.implicitly_wait(20)
        time.sleep(0.1)
        browser.find_element_by_xpath("//input[@id='fm-login-id']").send_keys('username')
        time.sleep(0.2)
        browser.find_element_by_xpath("//input[@id='fm-login-password']").send_keys('password')
        time.sleep(0.3)
        # 获取滑块长,宽
        button = browser.find_element_by_xpath("//span[@id='nc_1_n1z']")
        small_sliding = button.size
        # 获取整个div的长,宽
        big_sliding = browser.find_element_by_xpath("//span[@class='nc-lang-cnt']").size
        # 滑动的距离
        sliding_distance = big_sliding.get('width') - small_sliding.get('width')
        print(sliding_distance)
        ActionChains(browser).click_and_hold(button).perform()
        for i in [99, 87, 51, 59]:
            ActionChains(browser).move_by_offset(xoffset=i, yoffset=0).perform()
            time.sleep(random.random())
        ActionChains(browser).release().perform()
        time.sleep(1)
        browser.find_element_by_xpath("//button[@class='fm-button fm-submit password-login']").click()效果如下:

验证失败了,其实就是chromedriver被检测出来了.怎么解决呢?这里需要用一个打开exe程序的工具,对chromedriver里面的key进行更改,至于linux,mac应该也有类似工具。
(win环境工具) 下载地址: https://pan.baidu.com/s/1SnmXcCSeE2YT3Z8-Hey7yA  提取码 : wat7
找到解压目录,打开exe.

下一步用wxmedit.exe 打开 chromedriver.exe
查找$cdc

把cdc替换成abc(随意3个什么都行,不能多写也不能少写,长度一定要对应)
替换成功后保存,保存,保存....

接下来,重新来过,更改key后的尝试:
代码如下:
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
def selenium_login_alibaba(self, url):
    option = webdriver.ChromeOptions()
    option.add_argument('--disable-infobars')
    option.add_argument('--start-maximized')
    option.add_argument('user-agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"')
    option.add_argument('--disable-extensions')
    option.add_argument('--profile-directory=Default')
    option.add_argument("--incognito")
    prefs = {"profile.managed_default_content_settings.images": 2}
    option.add_experimental_option("prefs", prefs)
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    browser = webdriver.Chrome(chrome_options=option)
    browser.delete_all_cookies()
    browser.get(url)
    try:
        # 隐式等待
        time.sleep(2)
        browser.implicitly_wait(20)
        time.sleep(0.1)
        browser.execute_script('Object.defineProperties(navigator,{webdriver:{get:()=>false}})')
        browser.find_element_by_xpath("//input[@id='fm-login-id']").send_keys('username')
        time.sleep(0.2)
        browser.find_element_by_xpath("//input[@id='fm-login-password']").send_keys('password')
        time.sleep(0.3)
        # 获取滑块长,宽
        button = browser.find_element_by_xpath("//span[@id='nc_1_n1z']")
        small_sliding = button.size
        # 获取整个div的长,宽
        big_sliding = browser.find_element_by_xpath("//span[@class='nc-lang-cnt']").size
        # 滑动的距离
        sliding_distance = big_sliding.get('width') - small_sliding.get('width')
        print(sliding_distance)
        ActionChains(browser).click_and_hold(button).perform()
        for i in [99, 87, 51, 59]:
            ActionChains(browser).move_by_offset(xoffset=i, yoffset=0).perform()
            time.sleep(random.random())
        ActionChains(browser).release().perform()
        time.sleep(1)
        browser.find_element_by_xpath("//button[@class='fm-button fm-submit password-login']").click()效果如下: 滑动验证成功了,这种可以解决大部分的chromedriver检测机制

欢迎加qq群交流: 198447500
 51251
 50686
 41287
 38108
 32571
 29471
 28335
 23197
 23161
 21489
 1564°
 2284°
 1890°
 1829°
 2144°
 1876°
 2565°
 4298°
 4150°
 2960°