Тайм-аут ожидания Selenium.

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

Конечно, с более длинным набором результатов обычный браузер не будет отображаться, так как Javascript загружается лениво, поэтому я искал способ для Selenium дождаться загрузки всех результатов.

Ниже я использовал код ожидания по адресу: https://selenium-python.readthedocs.io/waits.html

Следующая ошибка тайм-аута для этой конкретной страницы:

try:
    element = WebDriverWait(driver,100).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "_3t0c")))

finally:
    print('done with webdriver wait anyway')

Выдается ошибка:

in <module>
    element = WebDriverWait(driver, 100).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "_3t0c")))
  File "..longFilePath....\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

ничего не отображается после Message:

РЕДАКТИРОВАТЬ: ошибка ниже отличается от ошибки из-за отсутствия скобок, как указано ниже @QHarr спасибо:

in <module>
    element = WebDriverWait(driver,30).until(EC.visibility_of_all_elements_located(By.CLASS_NAME, "_3t0c"))
TypeError: __init__() takes 2 positional arguments but 3 were given

NB, если я закомментирую этот цикл try, я все равно смогу получить все результаты на этой странице.

В противном случае я попытался заставить Selenium дождаться окончания класса div результатов, а также ошибку тайм-аута при тайм-ауте = 100, я вижу загрузку страницы, вероятно, менее чем за 20 секунд в Selenium.

Но я только что попробовал с другим классом = "_32mo", который, похоже, также имеет по одному имени в списке, и это, по-видимому, не истекло.

Я новичок в Selenium и действительно новичок в веб-скрейпинге, мне просто любопытно, может ли кто-нибудь объяснить, что может происходить?


person Will Croxford    schedule 15.02.2019    source источник
comment
Facebook не позволяет вам очищать их. Используйте API. И если вы не можете сделать это в API, не делайте этого.   -  person WizKid    schedule 15.02.2019


Ответы (2)


Для показанной ошибки метод ожидает кортеж, поэтому вам нужно больше скобок. Пытаться

WebDriverWait(driver,30).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "_3t0c")))
person QHarr    schedule 15.02.2019

TypeError: принимает 2 позиционных аргумента, но было задано 3

присвойте тип и значение локатора переменной, например: a =(By.CLASS_NAME, _3t0c)

а затем передайте эту переменную в скобки, например:

a = (By.CLASS_NAME, "_3t0c")
wait = WebDriverWait(driver,30)
element = wait.until(EC.visibility_of_all_elements_located(a))
person Pari Patel    schedule 28.05.2021