我试着用python selenium点击了一整天,没有运气,尝试了几个选择器,xpath..nothing看起来很适合我。这是我尝试点击的元素:
<span style="vertical-align: middle;">No</span>下面是我的明显的非函数代码
driver.find_element_by_link_text("No")发布于 2017-06-21 12:49:15
只有当您的span是锚标签的子级时,例如<a><span style="vertical-align: middle;">No</span></a>,按链接文本搜索才能帮助您。当你尝试点击它时,我相信它真的在一个锚里面,但如果不是,我建议你使用带有谓词的XPath,只有当确切的文本内容匹配时才返回True:
//span[text()="No"]请注意,//span[contains(text(), "No")]是一个非常不可靠的解决方案,因为它将返回带有文本的span元素
等等。
如果获取NoSuchElementException,则可能需要等待元素出现在DOM中
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='No']"))).click()发布于 2017-06-21 07:29:57
我不知道是否还有其他元素或其他东西。您可以使用css选择器选择范围:
driver.find_element_by_css_selector('span').click()我认为这是代码中唯一的span标记。可能不是。
作为一个非常“散弹枪”的解决方案。你可以点击每一个span标签:
for element in driver.find_elements_by_css_selector('span'):
element.click()这不是一个完美的解决方案,但它可能是一个起点。
另一个问题。页面是否动态加载内容?比如xhr之类的?也许您可能需要让selenium稍等片刻。要让selenium等待,您可以使用以下命令:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
wait_time = 60 # a very long wait time
element = WebDriverWait(driver, wait_time).\
until(EC.element_to_be_clickable((By.LINK_TEXT, 'No')))
element.click()或者,您可以使用By.CSS_SELECTOR而不是By.LINK_TEXT。因此,您可以使用更具体的规则来匹配或任何其他选择方法here。
https://stackoverflow.com/questions/44664434
复制相似问题