Python “无法使用”;“显式等待”;以正确的方式
我使用python和selenium编写了一个脚本,用于单击google地图侧栏中列出的一些链接。单击任何项目时,附加到每个潜在客户的相关信息将显示在右侧区域。剧本写得很好。然而,我使用了硬编码延迟来完成这项工作。如何通过Python “无法使用”;“显式等待”;以正确的方式,python,python-3.x,selenium,selenium-webdriver,web-scraping,Python,Python 3.x,Selenium,Selenium Webdriver,Web Scraping,我使用python和selenium编写了一个脚本,用于单击google地图侧栏中列出的一些链接。单击任何项目时,附加到每个潜在客户的相关信息将显示在右侧区域。剧本写得很好。然而,我使用了硬编码延迟来完成这项工作。如何通过显式等待实现相同的延迟,从而消除硬编码延迟。提前谢谢 链接至网站: 我正在尝试使用的脚本: import time from selenium import webdriver from selenium.webdriver.common.by import By from s
显式等待
实现相同的延迟,从而消除硬编码延迟。提前谢谢
链接至网站:
我正在尝试使用的脚本:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
link = "replace_with_above_link"
driver = webdriver.Chrome()
driver.get(link)
wait = WebDriverWait(driver, 10)
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "[id^='rlimg0_']"))):
item.location
time.sleep(3) #wish to try with explicit wait but can't find any idea
item.click()
driver.quit()
我尝试使用
wait.till(EC.staleness\u of(item))
而不是硬编码延迟,但没有成功。如果您想等到每次clcik后显示新数据,可以尝试以下操作:
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "[id^='rlimg0_']"))):
div = driver.find_element_by_xpath("//div[@class='xpdopen']")
item.location
item.click()
wait.until(EC.staleness_of(div))
有什么问题?您不能在没有睡眠的情况下单击循环中的每个链接吗?或者你应该等待新的数据呈现?太完美了。先生,你又耍了把戏
div=driver。通过xpath(“//div[@class='xpdopen']”)查找元素
行应位于for循环之前。但是,您在哪里找到这个类的xpdopen
,先生?这是每个链接显示的详细信息的div。我想您可以在相同的详细信息popoverorry中使用它的子节点或父节点/祖先,先生,这一行div=driver.find\u element\u by\u xpath(“//div[@class='xpdopen']”)
应该紧跟在项之后。click()
。再次感谢。嗯。。。我对此不太确定div
是当前的详细信息。当你点击新链接时,你正在等待新的细节出现(旧细节的过时)。所以应该在单击之前定义它。我的初始代码不起作用吗?你有什么例外吗?你建议的方法有时有效,有时在不同的行中抛出错误。