Python Selenium滚动到特定文本
我试图让selenium滚动facebook页面,直到特定文本出现,然后从该页面获取HTML标记。我试图在facebook上发布日期文本,并让Seleinum滚动到该页面。这段代码不会抛出错误,但也不会执行任务。我怎样才能做到这一点?现在它一直在滚动,而且没有停止。 我只是想滚动页面,直到“10月5日”文本可见Python Selenium滚动到特定文本,python,selenium,Python,Selenium,我试图让selenium滚动facebook页面,直到特定文本出现,然后从该页面获取HTML标记。我试图在facebook上发布日期文本,并让Seleinum滚动到该页面。这段代码不会抛出错误,但也不会执行任务。我怎样才能做到这一点?现在它一直在滚动,而且没有停止。 我只是想滚动页面,直到“10月5日”文本可见 driver.get("https://www.facebook.com/search/latest/?q=%23blacklivesmatter") sleep(4) wait = W
driver.get("https://www.facebook.com/search/latest/?q=%23blacklivesmatter")
sleep(4)
wait = WebDriverWait(driver, 10)
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
try:
wait.until(EC.visibility_of_element_located((By.XPATH, "//*[contains(text(), 'Oct 5th')]")))
html = driver.page_source
soup = BeautifulSoup(html)
except TimeoutException:
break
编辑:我们需要查找元素的存在而不是可见性
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.facebook.com/search/latest/?q=%23blacklivesmatter")
wait = WebDriverWait(driver, 10)
find_elem = None
scroll_from = 0
scroll_limit = 3000
while not find_elem:
sleep(2)
driver.execute_script("window.scrollTo(%d, %d);" %(scroll_from, scroll_from+scroll_limit))
scroll_from += scroll_limit
try:
find_elem = wait.until(EC.presence_of_element_located((By.XPATH, "//*[contains(text(), 'Oct 5th')]")))
except TimeoutException:
pass
driver.close()
编辑:我们需要查找元素的存在性,而不是可见性
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.facebook.com/search/latest/?q=%23blacklivesmatter")
wait = WebDriverWait(driver, 10)
find_elem = None
scroll_from = 0
scroll_limit = 3000
while not find_elem:
sleep(2)
driver.execute_script("window.scrollTo(%d, %d);" %(scroll_from, scroll_from+scroll_limit))
scroll_from += scroll_limit
try:
find_elem = wait.until(EC.presence_of_element_located((By.XPATH, "//*[contains(text(), 'Oct 5th')]")))
except TimeoutException:
pass
driver.close()
首先,如果您要查找的文本位于页面上的某个地方,即使它不是立即可见的,也应该直接在HTML中可见,而不需要滚动。只有当页面需要刷新以加载以前不可用的其他内容时,才需要滚动 现在,我建议改变你的方法:
时可能出现的问题,请等待。
,然后尝试直接在HTML源代码中查找此文本。您可以稍后更改它,并在确保脚本的其余部分正常工作时使用等待
首先,如果您要查找的文本位于页面上的某个地方,即使它不是立即可见的,也应该直接在HTML中可见,而不需要滚动。只有当页面需要刷新以加载以前不可用的其他内容时,才需要滚动 现在,我建议改变你的方法:
时可能出现的问题,请等待。
,然后尝试直接在HTML源代码中查找此文本。您可以稍后更改它,并在确保脚本的其余部分正常工作时使用等待
那对我不起作用。我用50分钟作为例子,而不是10月5日。它没有向下滚动到我想要的地方。它只是停止了。我几乎是在试图向下滚动到某个facebook发布时间。@Dilli如果你删除了
try
和除了
块怎么办?我编辑了一下我的答案。它会滚动一次吗?那也不行。与之前完全相同:/it向下滚动到一定数量,然后脚本停止。这对我不起作用。我用50分钟作为例子,而不是10月5日。它没有向下滚动到我想要的地方。它只是停止了。我几乎是在试图向下滚动到某个facebook发布时间。@Dilli如果你删除了try
和除了
块怎么办?我编辑了一下我的答案。它会滚动一次吗?那也不行。与之前完全一样:/它确实向下滚动到一定数量,然后脚本停止。我们确实需要滚动,因为我正在尝试获取其他帖子。例如,我正在查找文本“50分钟”,该文本只有在页面向下滚动加载后才会显示。@Dilli确定,然后按照我回答中的建议进行操作。我们确实需要滚动,因为我正在尝试获取其他帖子。例如,我正在查找文本“50分钟”,该文本仅在页面向下滚动加载后显示。@Dilli确定,然后按照我答案中的建议进行操作