Selenium: как бороться с ситуацией, когда с роботами обращаются - PullRequest
0 голосов
/ 05 октября 2018

Я использую Selenium для имитации входа в систему с помощью браузера Chrome.На странице входа есть ползунок, который нужно перетащить, чтобы завершить процесс входа.Странно то, что если я открою веб-страницу, используя driver.get(page).Тогда скользящий проверочный код всегда будет неудачным, даже если я вручную введу имя пользователя, pwd и перетащу ползунок

Я пытался добавить пользовательский агент, но без помощи.Есть ли другой путь?Я понимаю, что мы можем добавить пользовательские данные, чтобы пропустить эту часть, но я просто хочу сначала выяснить это.

Код проверки ползунка отобразится, если вы попытаетесь войти в систему более одного раза.Кажется, что веб-страница просто обнаруживает, что вы используете скрипт для входа в систему. Ошибка будет выглядеть так: «ops, не удалось проверить. Пожалуйста, обновите снова».Затем я использую 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()
...