以下是html代码的 屏幕截图 ,我正在努力,我想点击左侧的智能手表我正在使用以下代码点击它
driver.implicitly_wait(30)
driver.find_element_by_link_text('Smart Watches').click()
但我收到以下错误,我无能为力,为什么我无法在页面上找到它
selenium.common.exceptions.NoSuchElementException:消息:没有这样的 element:无法定位元素:{“method”:“link text“,”selector“:”Smart Watches“}(会话信息: chrome = 60.0.3112.113)(司机信息:chromedriver = 2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform = Windows NT 6.2.9200 x86_64)
我还尝试了显式代码和预期条件如下 - :
wait = WebDriverWait(driver, 20)
link = wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT,'"Smart Watches"')))
link.click()
但即使它给我超时例外
这是我从早上起就被卡住的页面的链接 的 https://www.kogan.com/au/shop/phones/ 我对编码很新,任何帮助都会有所帮助!!我只是想知道为什么find_element_by_link_text不能在这里工作,这对我来说很奇怪!!
提前致谢
答案 0 :(得分:1)
问题在于,当您使用stdio.h
时,它必须与链接中包含的文本完全匹配。在您的HTML图片中,您可以看到“智能手表”,但您看不到的是find_element_by_link_text()
正好在下方,但仍然在SPAN
内部已关闭。最有可能的是,如果您要展开它,您将看到在使用A
时必须包含的其他文字。
另一个选项是find_element_by_link_text()
,更像find_element_by_partial_link_text()
而不是contains()
。根据页面的不同,可能会发现太多匹配项。您必须尝试查看它是否有效。
另一种选择是使用XPath。根据您的需要,有很多不同的方法可以为此创建XPath。
这是最常见的,因此最有可能找到不需要的链接,但它可能会起作用。它与equals()
find_element_by_partial_link_text()
其他选项包括
//a[contains(.,'Smart Watches')
......等等......
答案 1 :(得分:0)
不知道为什么它不是wotks而是部分链接文本有效。请参阅我的java代码:
WebDriver driver=new FirefoxDriver();
driver.get("https://www.kogan.com/au/shop/phones/");
WebElement watch=driver.findElement(By.partialLinkText("Smart Watch"));
WebDriverWait waitElement=new WebDriverWait(driver, 30);
waitElement.until(ExpectedConditions.elementToBeClickable(watch));
watch.click();
答案 2 :(得分:0)
你可以这样试试......
访问文字:find_element_by_xpath["//a[contains(text(), 'Smart Watches')]"].click()
答案 3 :(得分:-1)
您需要添加双引号,因为它位于html代码中:
driver.find_element_by_link_text('"Smart Watches"').click()
答案 4 :(得分:-1)
大多数情况下,链接在页面加载后需要花费更多时间才能加载。而不是使用隐式等待使用显式等待。
wait = WebDriverWait(driver, 30)
link = wait.until(expected_conditions.presence_of_element_located((By.LINK_TEXT,"Smart Watches")))
link.click()
也可能是链接在另一个框架内的情况,在这种情况下,您将不得不切换到此框架。