我正在抓取大量使用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-showMoreRecommends'不再存在为止。
答案 0 :(得分:2)
@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()
答案 1 :(得分:2)
是的,您可以使用预期的条件。
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
。它将为您提供一个布尔值,以确定它是否不存在。
答案 2 :(得分:1)
装有while 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)