如何使用 python selenium 单击 span 元素

新手上路,请多包涵

我试图用 python selenium 单击它一整天,但没有运气,尝试了几个选择器,xpath ..似乎没有什么适合我。这是我尝试点击的元素:

 <span style="vertical-align: middle;">No</span>

这是我明显的非功能代码

driver.find_element_by_link_text("No")

原文由 user3281831 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

仅当您的 span 是锚标记的子项时,按链接文本搜索才能为您提供帮助,例如 <a><span style="vertical-align: middle;">No</span></a> 。当您尝试单击它时,我相信它确实位于锚点内,但如果不是,我建议您使用 XPath 和返回 True 的谓词,仅当确切的文本内容匹配:

 //span[text()="No"]

请注意 //span[contains(text(), "No")] 是非常不可靠的解决方案,因为它将返回 span 带有文本的元素

  • “十一月的雨”
  • “是的。没有。”
  • “我认为查克诺里斯可以帮助你”

ETC…

如果你得到 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()

原文由 Andersson 发布,翻译遵循 CC BY-SA 3.0 许可协议

我也在我的项目中为 Spotify 做一些事情。这是我编写的用于选择 span html 标签中的性别的函数。

需要图书馆

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import random

定义变量

gender_male = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Male']")))
gender_female = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Female']")))
non_binary = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Non-binary']")))
other = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Other']")))
pnts = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Prefer not to say']")))

使用随机

gender_guess = random.randint(1, 5)
if gender_guess == 1:
    gender_male.click()
elif gender_guess == 2:
    gender_female.click()
elif gender_guess == 3:
    non_binary.click()
elif gender_guess == 4:
    other.click()
elif gender_guess == 5:
    pnts.click()

完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

gender_male = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Male']")))
gender_female = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Female']")))
non_binary = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Non-binary']")))
other = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Other']")))
pnts = wait.until(EC.presence_of_element_located((By.XPATH, "//span[text()='Prefer not to say']")))

gender_guess = random.randint(1, 5)
if gender_guess == 1:
    gender_male.click()
elif gender_guess == 2:
    gender_female.click()
elif gender_guess == 3:
    non_binary.click()
elif gender_guess == 4:
    other.click()
elif gender_guess == 5:
    pnts.click()

希望这有所帮助。

原文由 unofficialdxnny 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题