无法根据列的文本值点击谷歌表单选择框
我正在使用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
你的代码有几个问题
.click()
这个方法不会返回任何东西,所以把它的结果赋值给一个变量其实是没用的。df2.loc[df2["TF"]== "YES"] = elemento_tf.click()
我不太明白这一行想要实现什么。你用
df2.loc[]
来索引,但它的值是True
还是False
呢...?df2.loc[df2["TF"]== "YES"] = ...
这行代码的结果是
df2.loc[True] = ... df2.loc[False] = ...
使用
time.sleep()
不是个好习惯,建议用WebDriverWait
来代替。如果你是通过 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()