Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “无法使用”;“显式等待”;以正确的方式_Python_Python 3.x_Selenium_Selenium Webdriver_Web Scraping - Fatal编程技术网

Python “无法使用”;“显式等待”;以正确的方式

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

我使用python和selenium编写了一个脚本,用于单击google地图侧栏中列出的一些链接。单击任何项目时,附加到每个潜在客户的相关信息将显示在右侧区域。剧本写得很好。然而,我使用了硬编码延迟来完成这项工作。如何通过
显式等待
实现相同的延迟,从而消除硬编码延迟。提前谢谢

链接至网站:

我正在尝试使用的脚本:

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
是当前的详细信息。当你点击新链接时,你正在等待新的细节出现(旧细节的过时)。所以应该在单击之前定义它。我的初始代码不起作用吗?你有什么例外吗?你建议的方法有时有效,有时在不同的行中抛出错误。