【问题标题】:Can't seem to be able to click on an element using selenium and python似乎无法使用 selenium 和 python 点击元素
【发布时间】:2019-07-21 19:42:31
【问题描述】:
【问题讨论】:
标签:
python-3.x
selenium
xpath
webdriverwait
xpath-1.0
【解决方案1】:
click() 元素上的文本为 首先最有帮助,然后click() 元素上的文本为 最新 您需要诱导 WebDriverWait 为所需的element_to_be_clickable(),您可以使用以下Locator Strategy:
-
使用XPATH:
driver.get('https://play.google.com/store/apps/details?id=com.nintendo.zama&showAllReviews=true')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h2[text()='Reviews']//following::span[text()='Most helpful first'][1]"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h2[text()='Reviews']//following::span[text()='Most helpful first'][1]//following::span[text()='Newest']"))).click()
-
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
浏览器快照:
【解决方案2】:
您应该对链接文本使用find_element_by_link_text 方法。
例如,考虑这个页面来源:
<html>
<body>
<p>Are you sure you want to do this?</p>
<a href="continue.html">Continue</a>
<a href="cancel.html">Cancel</a>
</body>
<html>
所以如果你想通过链接文本点击:
continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')
但是,在您的情况下,“最有帮助的第一”文本不是链接文本,它位于 <span> 标记中。
所以你可以使用driver.find_element_by_css_selector 方法或driver.find_element_by_xpath 方法:
CSS:
driver.find_element_by_css_selector('.KKjvXb > span');
XPATH:
driver.find_element_by_xpath("//span[text() = 'Most helpful first']");
【解决方案3】:
不是这个元素,你应该使用其他元素并使用 send_keys,要检查它你需要按 F12 并注意突出显示“最有帮助的优先”字段的元素。它是您已经在寻找的那个元素的父类,对我来说是这样的:
from selenium.webdriver.common.keys import Keys
driver.find_element_by_xpath('//*[@class="MocG8c UFSXYb LMgvRb KKjvXb"]').send_keys(Keys.ARROW_DOWN, Keys.ARROW_DOWN)
然后你看到另一个列表,你需要从列表中找到好的元素:
driver.find_elements_by_xpath('//div[@jsname="wQNmvb"]')[-3].click()
我使用索引 -3 因为有 6 个元素具有相同的 xpath。
【解决方案4】:
在浏览器控制台中尝试并使用 javascript executor 执行它::
$x("(//span[text()='最有帮助的优先'])[1]")[0].click();
【解决方案5】:
我设法做到了。
dropdown = driver.find_element_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/c-wiz/div[1]/div/div[1]/div[2]').click()
sleep(2)
new_comments = driver.find_element_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/c-wiz/div[1]/div/div[2]/div[1]').click()