Элементы иногда не расположены [Selenium, Python] - PullRequest
0 голосов
/ 15 октября 2019

Я использую Selenium для автоматизации процесса и использую ChroPath, чтобы найти такие элементы, как XPath, для более легкого использования. Но иногда элементы не доступны;пример:

Элемент, который я пытаюсь найти

ChroPath

try:
    P_Captcha_ButtonWait = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH("//div[@class='antigate_solver recaptcha in_process']"))))
    print("Captcha is being solved. Waiting 40 seconds...")
    time.sleep(40)
    CaptchaSolved = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//div[@class='antigate_solver recaptcha solved']")))
    time.sleep(3)
    print("It's rocking!!!!")
    driver.find_element_by_xpath(
            "/html[1]/body[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/div[1]/p[3]/button[1]").click()
except:
    P_Email_Verification = WebDriverWait(driver, 10).until(EC.presence_of_element_located((
        By.XPATH, "/html[1]/body[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/div[1]/div[2]/label[1]/div[1]/input[1]")))
    driver.find_element_by_xpath(
        "/html[1]/body[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/div[1]/div[2]/label[1]/div[1]/input[1]").click()
    print("Something went wrong and idk why?")

Это строка кодаЯ написал для части Captcha, и я на самом деле использую расширение Anti-Captcha.com, и я хочу найти текст, который Анти-Captcha дает, когда он решает капчу. Это выглядит так: Anti-Captcha

Кроме того, веб-сайт, на котором я пробую это, - ProtonMail, страница, на которой вы проверяете себя, человек вы или нет.

Я уже кодировал ту часть, где вы проверяете себя, используя электронную почту, но я хочу, чтобы Captcha использовался в качестве основного использования, а E-Mail Verification в качестве ударной на случай, если с Captcha что-то пойдет не так.

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

Я хотел бы знатьопыт поиска пользователями некоторых элементов.

Обновление:

Это еще одна попытка исправить код и попробовать другие методы, но все еще не работает.

try:
    P_Captcha_ButtonWait = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//a[@class='status'][contains(.,'Solving is in process...')]")))
    if P_Captcha_ButtonWait is True:
        print("Captcha is being solved. Waiting 40 seconds...")
        time.sleep(40)
    CaptchaSolved = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//div[@class='antigate_solver recaptcha solved'][contains(.,'Solved')]")))
    if CaptchaSolved is True:
        time.sleep(3)
        print("It's rocking!!!!")
        driver.find_element_by_xpath(
                "/html[1]/body[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/div[1]/p[3]/button[1]").click()
except TimeoutException:
#    P_Email_Verification = WebDriverWait(driver, 10).until(EC.presence_of_element_located((
#        By.XPATH, "/html[1]/body[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/div[1]/div[2]/label[1]/div[1]/input[1]")))
#    driver.find_element_by_xpath(
#        "/html[1]/body[1]/div[2]/div[1]/div[1]/div[1]/form[1]/div[1]/div[1]/div[2]/label[1]/div[1]/input[1]").click()
    print("Something went wrong and idk why?")
    driver.close()

Я сделал строки в except в качестве комментариев на данный момент, так как моя главная цель - исправить поиск элемента Анти-Капчи.

В основном, что бы я ни делал, try не будет работать, потому что Элемент не 'основал. Я думал, чтобы заставить это работать по-другому;если опция Captcha доступна при выборе, водитель может подождать 30-80 секунд, пока не будет решен Captcha. (вот как долго анти-капча тратится примерно раз, чтобы найти капчу). Но иногда они занимают до 200 секунд, что приводит к ошибкам и вызывает сбой всего скрипта. Вот почему я хочу найти этот элемент, потому что он проще и поддерживает работу скрипта.

...