这就是问题:
我正在使用selenium从此网页下载所有成功的项目(" https://www.rockethub.com/projects")。如果点击任何按钮,则网址不会更改。 我对成功的项目感兴趣,因此我点击按钮状态然后点击成功。
一旦进入此页面,我需要重复向下滚动以显示其他网址。 这是问题所在。到目前为止,我一直无法向下滚动页面
这是我的代码:
from selenium.webdriver import Firefox
from selenium import webdriver
url="https://www.rockethub.com/projects"
link=[]
wd = webdriver.Firefox()
wd.get(url)
next_button = wd.find_element_by_link_text('Status')
next_button.click()
next_but = wd.find_element_by_link_text('Successful')
next_but.click()
wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
关于如何解决这个问题的任何想法?
由于
Giangi
答案 0 :(得分:0)
在循环中运行wd.execute_script("window.scrollTo(0, document.body.scrollHeight);")
,因为每次执行脚本时,只会返回一定数量的数据,所以你必须在循环中执行它。
如果您只想一次检索所有成功的项目而不想模拟向下滚动到页面,那么请查看this answer,这可能会有所帮助。
答案 1 :(得分:0)
由于内容是动态更新的,因此您需要在执行下一步之前等待更改内容:
class element_is_not(object):
""" An expectation for checking that the element returned by
the locator is not equal to a given element.
"""
def __init__(self, locator, element):
self.locator = locator
self.element = element
def __call__(self, driver):
new_element = driver.find_element(*self.locator)
return new_element if self.element != new_element else None
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
wait = WebDriverWait(driver, 10)
driver.get("https://www.rockethub.com/projects")
# get the last box
by_last_box = (By.CSS_SELECTOR, '.project-box:last-of-type')
last_box = wait.until(element_is_not(by_last_box, None))
# click on menu Status > Successful
driver.find_element_by_link_text('Status').click()
driver.find_element_by_link_text('Successful').click()
# wait for a new box to be added
last_box = wait.until(element_is_not(by_last_box, last_box))
# scroll down the page
driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
# wait for a new box to be added
last_box = wait.until(element_is_not(by_last_box, last_box))