接受 1 个位置参数,但使用 Selenium Python 给了 2 个错误

Posted

技术标签:

【中文标题】接受 1 个位置参数,但使用 Selenium Python 给了 2 个错误【英文标题】:Takes 1 positional argument but 2 were given error using Selenium Python 【发布时间】:2021-12-30 11:22:54 【问题描述】:

您好,我试图点击网站上的男性按钮:https://fs2.formsite.com/meherpavan/form2/index.html?1537702596407 但它给了我错误:

TypeError: element_to_be_clickable() takes 1 positional argument but 2 were given.

代码是

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


driver=webdriver.Chrome(executable_path="D:\ChromeDriverExtracted\chromedriver")
driver.get("https://fs2.formsite.com/meherpavan/form2/index.html?1537702596407")

WebDriverWait(driver, 2).until(EC.element_to_be_clickable(By.XPATH, "//type[@name='RESULT_RadioButton-7_0']")).click()

【问题讨论】:

好的。找到答案刚刚写了``` driver.find_element_by_xpath("//*[@id='q26']/table/tbody/tr[1]/td/label")。点击()``` 【参考方案1】:

这是一个你应该传递的元组,

EC.element_to_be_clickable((By.XPATH, "//type[@name='RESULT_RadioButton-7_0']")))

【讨论】:

它没有点击按钮。错误 DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver=webdriver.Chrome(executable_path="D:\ChromeDriverExtracted\chromedriver") @NikaTheKilla 这个问题出现在 selenium、pip 和 python 更新中,查看这里***.com/questions/64717302/…【参考方案2】:

您需要在element_to_be_clickable() 中传递一个元组,如下所示:

EC.element_to_be_clickable((By.XPATH, "//type[@name='RESULT_RadioButton-7_0']"))

但是,您的工作代码行将是:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='RESULT_RadioButton-7_0']"))).click()

浏览器快照:


此外,selenium4 以下行:

webdriver.Chrome(executable_path="D:\ChromeDriverExtracted\chromedriver") 

现在与DeprecationWarning 关联如下:

DeprecationWarning: executable_path has been deprecated, please pass in a Service object

所以你需要传递一个 Service 类的实例作为参数,你的有效代码块将是:

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

s = Service('D:\ChromeDriverExtracted\chromedriver.exe')
driver = webdriver.Chrome(service=s)
driver.get("https://fs2.formsite.com/meherpavan/form2/index.html?1537702596407")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='RESULT_RadioButton-7_0']"))).click()

参考文献

您可以在以下位置找到一些相关的详细讨论:

init() takes 2 positional arguments but 3 were given using WebDriverWait and expected_conditions as element_to_be_clickable with Selenium Python Use Selenium with Brave Browser pass service object written in python

【讨论】:

它给了我这个错误并且它没有点击它错误:回溯(最近一次调用最后一次):文件“C:\ Users \ Puhceto \ SeleniumProject \ venv \ Clicking A Button.py”,第 10 行,在 WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH, "//type[@name='RESULT_RadioButton-7_0']"))).click() @NikaTheKilla 查看更新的答案并告诉我状态。 也可以。谢谢:)

以上是关于接受 1 个位置参数,但使用 Selenium Python 给了 2 个错误的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: login() 接受 1 个位置参数,但给出了 2 个

Python:函数接受 1 个位置参数,但给出了 2 个,如何?

接受 1 个位置参数,但给出了 2 个

python接受1个位置参数,但给出了2个[重复]

TypeError: worker() 接受 0 个位置参数,但给出了 1 个

建立一个类:building_dict() 接受 1 个位置参数,但给出了 2 个