页面更改后如何捕获通过这两种条件选择的元素

Posted

技术标签:

【中文标题】页面更改后如何捕获通过这两种条件选择的元素【英文标题】:How to catch the elements selected through both the conditions once page changes 【发布时间】:2022-01-22 22:05:50 【问题描述】:

我正在尝试抓取一些网址,但根据结果的数量,页面代码会发生变化。 以下两者都有效,但没有一个返回 100% 的结果。我正在尝试创建某种不会留下 NAN 结果的“如果”。

url = [url.get_attribute("href") for url in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, 'base-card__full-link')))]

url = [url.get_attribute("href") for url in WebDriverWait(driver, 50).until(EC.visibility_of_all_elements_located((By.XPATH, '//*[@id="main-content"]/section[2]/ul/li/a')))]

非常感谢您的帮助。

【问题讨论】:

这听起来像X-Y problem。与其寻求解决问题的帮助,不如编辑您的问题并询问实际问题。你想做什么? 【参考方案1】:

要创建 href 属性列表,您可以在 lambda 表达式中使用 xpath 组合条件,并且可以使用以下任一 @987654322 @:

使用 lambda 表达式:

hrefs = [url.get_attribute("href") for url in WebDriverWait(driver, 20).until(lambda driver: driver.find_element(By.CLASS_NAME,"base-card__full-link") or driver.find_element(By.XPATH,"//*[@id='main-content']/section[2]/ul/li/a"))]

【讨论】:

谢谢。我完全理解你在那里做了什么,但它不起作用。它返回“'WebElement' 对象不可迭代”,因此它不会以某种方式跳过未找到的元素。

以上是关于页面更改后如何捕获通过这两种条件选择的元素的主要内容,如果未能解决你的问题,请参考以下文章

仅在键盘选项卡后获取焦点元素

如何使用Selenium Webdriver捕获特定元素而不是整个页面的屏幕截图?

如何在使用 QWebEngineView 'loadFinished' 加载页面后立即更改 html 元素?

Selenium webdriver在页面更改后获取元素

如何区分捕获图像相册选择的图像

CSS:如何选择一个元素下的两种同级子元素?