Остановка программы до тех пор, пока не будет найден элемент [Selenium, Python] - PullRequest
0 голосов
/ 12 октября 2019
import pyautogui
import selenium
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

Привет! Так что я смог обнаружить в Selenium Solving is in process... http://prntscr.com/pib0pf, и, если Элемент активен, time.sleep() будет активирован до того, как остальная часть кода продолжится. Чтобы дать капче некоторое время, прежде чем она будет решена. Но дело в том, что я передумал и подумал, что на самом деле было бы лучше, если бы я нашел способ сделать проверку селена для элемента, и если элемент еще не доступен, следует выполнить time.sleep(). Я хочу этого, потому что первая идея приведет к ошибкам, если капча не будет решена в данное время. Но со второй идеей, Selenium автоматически проверит, активен ли данный Элемент, и если нет, то нужно добавить 30 секунд в скрипт, прежде чем будет выполнен остальной код.

#~ Continuing code

time.sleep(3)
print("Form filled!")
time.sleep(10)


if driver.find_element_by_xpath("//div[@class='antigate_solver recaptcha in_process']"):
    print("Waiting 60 seconds...\n")
    time.sleep(60)

if driver.find_element_by_xpath("//div[@class='antigate_solver recaptcha solved']"):
    time.sleep(1.5)
    print("Captcha Solved...")

driver.find_element_by_xpath('/html[1]/body[1]/main[1]/div[1]/div[2]/form[1]/small[1]/div[1]/label[1]/input[1]').click()
print("Submitting...")
time.sleep(1.5)
driver.find_element_by_xpath('/html[1]/body[1]/main[1]/div[1]/div[2]/form[1]/div[12]/button[1]').click()

1 Ответ

1 голос
/ 12 октября 2019

Явное ожидание

Явное ожидание - это код, который вы определяете для ожидания выполнения определенного условия, прежде чем продолжить работу в коде. В крайнем случае это time.sleep (), который устанавливает условие для точного периода времени ожидания. Есть несколько удобных методов, которые помогут вам написать код, который будет ждать столько времени, сколько потребуется. WebDriverWait в сочетании с ExpectedCondition - это один из способов, которым это может быть достигнуто.

EXP:


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()       

Это ожидает до 10 секунд, прежде чем вызвать TimeoutException, если не найдетэлемент, чтобы вернуться в течение 10 секунд. По умолчанию WebDriverWait вызывает ExpectedCondition каждые 500 миллисекунд, пока не завершится успешно. Успешное возвращение для типа ExpectedCondition - логическое возвращаемое значение true или не нулевое возвращаемое значение для всех других типов ExpectedCondition.

Источник: https://selenium -python.readthedocs.io / waits.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...