无法根据列的文本值点击谷歌表单选择框

-1 投票
1 回答
44 浏览
提问于 2025-04-12 00:52

我正在使用pandas和Selenium把Excel表格里的信息传递到一个Google表单。我想要的代码是:如果“TF”这一列的内容是“YES”,就点击Google表单的选择框;如果是“NO”,就不去管这个选择框。

elemento_tf = chrome.find_element(By.XPATH,"//*[@id='i35']")
time.sleep(0.5)
df2.loc[df2["TF"]== "YES"] = elemento_tf.click()

这是我现在的代码。即使“TF”这一列的内容是“NO”,它也总是会点击选择框。

1 个回答

1

你的代码有几个问题

  1. .click() 这个方法不会返回任何东西,所以把它的结果赋值给一个变量其实是没用的。

    df2.loc[df2["TF"]== "YES"] = elemento_tf.click()
    
  2. 我不太明白这一行想要实现什么。你用 df2.loc[] 来索引,但它的值是 True 还是 False 呢...?

    df2.loc[df2["TF"]== "YES"] = ...
    

    这行代码的结果是

    df2.loc[True] = ...
    df2.loc[False] = ...
    
  3. 使用 time.sleep() 不是个好习惯,建议用 WebDriverWait 来代替。

  4. 如果你是通过 ID 来查找元素,那就直接用 By.ID()

    (By.XPATH,"//*[@id='i35']")
    

    这样就变成了

    (By.ID,"i35")
    

你缺少的是一个条件判断,来检查 df2["TF"]== "YES",然后根据这个条件的结果来决定接下来的代码怎么执行。考虑到这些问题和上面的建议,我会把代码改成这样

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

wait = WebDriverWait(driver, 10)

if df2["TF"] == "YES":
    wait.until(EC.element_to_be_clickable((By.ID,"i35"))).click()

撰写回答