类型错误:find_element()接受1到3个位置参数,但给出了11个



错误消息img

我一直试图从webdriver访问一个网页并点击一个特定的框架(它过去是有效的(,但现在它给了我这个位置参数错误。以下是我尝试运行的代码块:

driver.get(mastercon)
driver.switch_to.default_content()
wait(driver, 120).until(EC.frame_to_be_available_and_switch_to_it('iframe_cbk'))
sleep(40)

给出的错误:

TypeError                                 Traceback (most recent call last)
Input In [13], in <cell line: 3>()
1 driver.get(mastercon)
2 driver.switch_to.default_content()
----> 3 wait(driver, 120).until(EC.frame_to_be_available_and_switch_to_it("iframe_cbk"))
4 sleep(40)
6 #driver.switch_to_frame('iframe_cbk')
7 
8 #Dashboard/Filter
File ~AppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriversupportwait.py:78, in WebDriverWait.until(self, method, message)
76 while True:
77     try:
---> 78         value = method(self._driver)
79         if value:
80             return value
File ~AppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriversupportexpected_conditions.py:256, in frame_to_be_available_and_switch_to_it.<locals>._predicate(driver)
254 try:
255     if hasattr(locator, '__iter__'):
--> 256         driver.switch_to.frame(driver.find_element(*locator))
257     else:
258         driver.switch_to.frame(locator)
TypeError: find_element() takes from 1 to 3 positional arguments but 11 were given

较大的代码块(当我已经在所需网站的主页上时运行(

# change frame 
do_dispute = []
for tx_dispute,refund_date in zip(df_refund.claim_id,df_refund.refund_date):
try:
driver.get(mastercon)
driver.switch_to.default_content()
wait(driver, 120).until(EC.frame_to_be_available_and_switch_to_it("iframe_cbk"))
sleep(40)

#driver.switch_to_frame('iframe_cbk')
#Dashboard/Filter
sleep(15)
driver.find_element_by_css_selector(dashboard_slash_filter_button).click()
#New Filter
sleep(15)
driver.find_element_by_css_selector(new_filter_button).click()
# Insert claim_id in text box Claim Manager ID 
sleep(8)
driver.find_element_by_css_selector(text_box_claim_id).send_keys(tx_dispute)
# Click to search for transaction
sleep(4)
driver.find_element_by_css_selector(search_tx).click()

您使用的是不推荐使用的语法。

driver.find_element_by_css_selector(dashboard_slash_filter_button).click()

应该是:

driver.find_element(By.CSS_SELECTOR, '...').click()

甚至更好:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "..."))).click()

还有:

wait(driver, 120).until(EC.frame_to_be_available_and_switch_to_it("iframe_cbk"))

应该变成:

WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//...correct xpath selector")))

Selenium文档可以在这里找到:https://www.selenium.dev/documentation/

最新更新