[英]I can't find any elements on the webpage using pytest, but I can find the same elements using console
我可以在控制台 (F12) 的页面上找到元素(使用 css 或 xpath)。
$$("span.menu-item[data-vars-category-name='Most Popular']")
但我无法使用 Selenium (pytest) 找到相同的元素
driver.find_element_by_css_selector("span[data-vars-category-name='Most Popular']”)
元素代码:
<span tabindex="0" role="button" on="tap:category--1.scrollTo(duration=200),
AMP.setState({selectedCategoryId: -1, showDropdown: false})" data-vars-category-name="Most Popular" class="menu-item item-1 category-selector " data-amp-bind-class="'menu-item item-1 category-selector ' + (
((!selectedCategoryId && -1 == -2) ||
-1 == selectedCategoryId) ? 'selected' : ''
)" i-amphtml-binding="" i-amphtml-key="10">Most Popular</span>
我究竟做错了什么? 我可能应该采取额外的步骤来查找页面上的项目。
:!!I can not find any elements on the page: https://actions.google.com/u/0/amp?url=https://amplify.doordash.com/doordash/restaurant/aHR0cHM6Ly93d3cuZG9vcmRhc2guY29tL3N0b3JlL3BpenotYS1jaGljYWdvLXBhbG8tYWx0by0zNTMv%3Fv%3D090020190919&projectId =doordash-2e718&state=%7B%22phoneNumber%22:%22%22,%22isPickupOrder%22:%22true%22%7D&ei=_lueXbfaEeT19AOf_amQBg&source=1
你的 cssselector 工作。 有一个 iframe。 您可以使用以下代码切换到框架
driver.switch_to.frame(iframe)
移至 iframe 后,您可以通过以下方式恢复默认内容:
driver.switch_to.default_content()
我尝试使用下面的 Java 代码并且它有效
List<WebElement> frames = driver.findElements(By.tagName("iframe"));
System.out.println("Frame Size: "+ frames.size());
for(WebElement frame:frames){
try {
driver.switchTo().frame(frame);
break;
}catch(NoSuchFrameException e) {
e.printStackTrace();
}
}
driver.findElement(By.cssSelector("span[data-vars-category-name='Most Popular']")).click();
它在iframe
内部,您需要先切换并诱导WebDriverWait
。 Selenium 提供了一种方法,使用.frame_to_be_available_and_switch_to_it
。
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CLASS_NAME, 'FyXNqd')))
most_popular = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'span[data-vars-category-name="Most Popular"]')))
most_popular.click()
导入后:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.