Драйвер Python Selenium с помощью селектора CSS внутри цикла - PullRequest
1 голос
/ 18 июня 2019

Я соскребаю тяжелую страницу с помощью JS, где я выбираю кнопку js

driver.find_element_by_css_selector('.u-textColorDarker').click()

, который отображает с. Внутри этой формы отображается некоторая информация, но для получения всего контента есть кнопка («показать больше»), которую нужно щелкнуть n раз, чтобы отобразить весь контент. Когда больше нечего показать, кнопка исчезает.

На этой странице необходимо нажать кнопку 3 раза. Итак, быстрое решение моей проблемы:

driver.find_element_by_css_selector('.js-showMoreRecommends').click()
time.sleep(2)
driver.find_element_by_css_selector('.js-showMoreRecommends').click()
time.sleep(2)
driver.find_element_by_css_selector('.js-showMoreRecommends').click()
time.sleep(2)

Есть ли способ поместить это в цикл, чтобы действие выполнялось внутри цикла, пока селектор '.js-showMoreRecommend' больше не присутствует?

Ответы [ 3 ]

2 голосов
/ 18 июня 2019

Как @ mike-scotty прокомментировал: «Используйте while»

Рекомендуется использовать WebDriverWait , а не time.sleep().

Должно выглядеть примерно так:

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

while WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".js-showMoreRecommends"))):
    show_more = WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".js-showMoreRecommends")))
    show_more.click()
2 голосов
/ 18 июня 2019

Да, вы можете использовать ожидаемые условия.

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

driver = webdriver.Firefox()
driver.get("http://somedomain/url")

while not EC.invisibility_of_element_located((By.CSS_SELECTOR, ".js-showMoreRecommends")):
    driver.find_element_by_css_selector('.js-showMoreRecommends').click()

Я пишу это по памяти, но это должно указать вам общее направление.Мясо этого - ожидаемые условия метода EC.invisibility_of_element_located.Это даст вам логическое значение, чтобы определить, прошло ли оно еще.

1 голос
/ 18 июня 2019

Установленный из цикла true, вы можете попытаться выполнить цикл while, когда отображается кнопка

while driver.find_element_by_css_selector('.js-showMoreRecommends').is_displayed():
    driver.find_element_by_css_selector('.js-showMoreRecommends').click()
    time.sleep(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...