硒:如何应对被视为机器人的情况

时间:2018-10-05 10:56:41

标签: python selenium web-crawler

我正在使用Selenium模拟Chrome浏览器的登录。登录页面上有“滑块”按钮,需要拖动它才能完成登录过程。 奇怪的是,如果我使用driver.get(page)打开网页。然后,即使我手动输入用户名,密码并拖动滑块,滑动验证码也将始终失败。

我试图添加用户代理,但没有帮助。 还有其他办法吗?我知道我们可以添加用户数据来跳过这部分,但我只想先弄清楚。

如果您尝试多次登录,将显示滑块验证码。该网页似乎只是检测到您正在使用脚本登录。 该错误将类似于:“操作,验证失败。请重新刷新”。然后,我使用driver.find_element_by_xpath("//*[@id='nocaptcha']/div/span/a").click()刷新滑块。

谢谢。

driver = webdriver.Chrome()
driver.get("https://login.taobao.com/member/login.jhtml?spm=a21bo.2017.754894437.1.5af911d95pqPfs&f=top&redirectURL=https%3A%2F%2Fwww.taobao.com%2F")
action = ActionChains(driver)
login()

def login():
    driver.find_element_by_class_name("login-switch").click()
    driver.find_element_by_id('TPL_username_1').clear()
    driver.find_element_by_id('TPL_username_1').send_keys('xxx')
    driver.find_element_by_id('TPL_password_1').clear()
    driver.find_element_by_id('TPL_password_1').send_keys("xxx")
    time.sleep(1.5)
    # driver.find_element_by_id('J_SubmitStatic').click()
    Slider()

def Slider():
    #Sliding verification code
    while True:
        try:
            slip=driver.find_element_by_xpath("//*[@id='nc_1_n1z']")
            action.click_and_hold(slip).perform()
            action.move_by_offset(150,0)
            time.sleep(0.8)
            action.move_by_offset(148,0)
            action.release().perform()
            time.sleep(2)
            text = driver.find_element_by_xpath("//*[@id='nc_1__scale_text']/span")
            if text.text.startswith("请在下方"):
                print("Successful")
                break
            if text.text.startswith("请点击"):
                print("Successful")
                break
            if text.text.startswith("请按住"):
                print("Failed. Try again")
                continue
        except Exception:
            ##Error occurs, click the "Refresh" button to refresh the sliding verification code again
            driver.find_element_by_xpath("//*[@id='nocaptcha']/div/span/a").click()
    driver.find_element_by_id('J_SubmitStatic').click()

0 个答案:

没有答案