python - 在 python selenium 中检查网页上是否加载了 web 元素
问题描述
我想从包含在网站上搜索的名称的个人资料 URL 的网页中抓取“href”标签。有时,如果某个特定的配置文件不存在,它甚至可能给出空结果。我正在使用 python selenium,其中我从 csv 文件中输入名称,并将密钥循环发送到网站上的搜索栏。但是,有时会随机将先前搜索的配置文件 URL 带到现有名称搜索中。这是非常随机发生的,我已经多次检查了代码的逻辑,并且该部分似乎没有错误。
我怀疑在我使用 selenium 指向特定元素之前网页没有完全加载。我尝试过使用 sleep() ,但它也适用于某些值,而且只适用于某些时候。增加睡眠时间只会增加时间而不能保证准确性(经过试验和测试)。
我实际上想要一种方法来检查网页上是否存在此人的 URL,如果存在,我想要该特定人的 URL,而不是前一个人的 URL。有针对这个的解决方法吗。这是一小段代码,它将进一步提高清晰度:
# unique result with name
name = '"' + row[1] + '"'
xpath = "//*[@class='search-result__image-wrapper']/a"
search_query.send_keys(name)
search_query.send_keys(Keys.RETURN)
sleep(5)
#WebDriverWait(driver, timeout).until(EC.presence_of_element_located((By.XPATH, xpath)))
links = driver.find_elements_by_xpath(xpath)
if len(links) == 1:
for link in links:
url = link.get_attribute('href')
print('name')
PS:我也经历过关于堆栈溢出的类似问题,但它们似乎都不起作用。我还使用了网络驱动程序等待方法,该方法检查网站上特定元素的可用性,该元素在每次搜索时都会出现,但这似乎也不起作用。
解决方案
为什么不等到名称列表中的第一个项目可见,然后分配名称列表并遍历名称列表。请看下面的代码:
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
name = '"' + row[1] + '"'
css_first_name = ".search-result__image-wrapper > a:nth-child(1)"
css_name_list = ".search-result__image-wrapper > a"
search_query.send_keys(name)
search_query.send_keys(Keys.RETURN)
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, css_first_name)))
links = driver.find_elements_by_css_selector(css_name_list)
for link in links:
url = link.get_attribute('href')
print('name')
推荐阅读
- javascript - Vue v2,使用 Webpack 5 Module Federation 使用微前端架构时的嵌套路由
- javascript - 从 json 文件中过滤数组
- python - Python将复数数组分为实部和虚部,输出8*8矩阵
- typescript - 如何基于陈旧的 github PR 触发操作?
- javascript - 地图错误一侧的传单绘图标记
- c# - Microsoft Visual Studio 2019:无法打开项目文件。找不到 .NET SDK
- angular - CkEditor 5 Angular - 更改列表按钮颜色
- html - Header 标签中的代码会阻止 CSS 正常工作吗?
- python - 将具有相同列但长度不同的数据框组合起来
- reactjs - 使用 React Context 时如何在路由器内部传递道具