首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium -即使在验证之后也无法定位元素

Selenium -即使在验证之后也无法定位元素
EN

Stack Overflow用户
提问于 2021-09-07 20:26:36
回答 2查看 79关注 0票数 0

这几个月来一直运行良好,但现在出现了错误。这是一个非常简单的代码:打开Chrome并取出一个元素。它现在告诉我它无法定位元素。

我检查了打开Chrome窗口的元素,并验证了XPATH,它与代码中的内容完全匹配。我拍了一张它正在运行的页面的截图,看起来都很好。

我遗漏了什么?

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import webbrowser
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time

site_lat = 34.29421
site_lon = -97.44667

def watershed_lookup(site_lat, site_lon):
    op=webdriver.ChromeOptions()
    #op.add_argument('--headless')
    op.add_argument('window-size=1920x1080')

    url_water = 'https://mywaterway.epa.gov/community/'+str(site_lon)+','+str(site_lat)+'/overview'

    driver = webdriver.Chrome(ChromeDriverManager().install(), options = op)
    driver.get(url_water)
    time.sleep(3)
    element = driver.find_element_by_xpath("//*[@id=\"root\"]/div/div[4]/div[2]/div[2]/div[1]/div[1]/div/p[2]")           
    start1 = 'WATERSHED: '
    end1 = '('
    end2 = ')'
    s = element.text

    watershed_name = s[s.find(start1)+len(start1):s.rfind(end1)]
    watershed_id = s[s.find(end1)+len(end1):s.rfind(end2)]

    print("Watershed Name: " + watershed_name)
    print("Watershed ID: " + watershed_id)
    driver.close()


watershed_lookup(site_lat, site_lon)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-08 03:26:51

您使用的Xpath是绝对Xpath,尝试使用相对Xpath查找该元素。我看到绝对xpath使用dev工具工作,并在运行时失败。使用显式等待,直到该元素可见/可插入,然后进行验证。

票数 0
EN

Stack Overflow用户

发布于 2021-09-08 03:20:27

也许是因为你没有等待。

要么应用隐式等待:

代码语言:javascript
复制
driver = webdriver.Chrome(ChromeDriverManager().install(), options = op)
driver.implicitly_wait(20)
driver.get(url_water)
...

或应用显式等待:

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

...
driver.get(url_water)
wait = WebDriverWait(driver,20)
ele = wait.until(EC.visibility_of_element_located((By.XPATH,"//*[@id=\"root\"]/div/div[4]/div[2]/div[2]/div[1]/div[1]/div/p[2]")))
print(ele.text)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69094205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档