首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError: element_to_be_clickable()采用一个位置参数,但给出了两个[Selenium ]

TypeError: element_to_be_clickable()采用一个位置参数,但给出了两个[Selenium ]
EN

Stack Overflow用户
提问于 2022-11-01 01:27:28
回答 1查看 65关注 0票数 0

下面的脚本将转到该页面并下载上市公司的相关财务报表。

代码语言:javascript
运行
复制
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    import numpy as np
    
    options = Options()
    options.add_argument("--start-maximized")
    
    import time
    start = time.process_time()
    
    time.sleep(3)
    s = Service(path)
    driver = webdriver.Chrome(options=options, service=s)
    #go to page
    page = 'https://www.idx.co.id/perusahaan-tercatat/laporan-keuangan-dan-tahunan/'
    driver.get(page)
    
    from selenium.webdriver.common.keys import Keys
    
    try:
            #click on the input button
            wait = WebDriverWait(driver, 2)
            inputElement = wait.until(EC.element_to_be_clickable((By.XPATH, 
                            "/html/body/main/div[1]/div[2]/div[3]/div/span/span[1]/span/ul/li/input")))
            inputElement.send_keys(company, Keys.ENTER)
            
            #input Element 2 - choose year,2022
            inputElement2 = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="yearList"]/option[1]'))).click()
    
            #choose period
            inputElement3 = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 
                            "#periodList > option:nth-child(3)"))).click()
    
            #click on "Cari" button
            wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,"#searchButton")).click() 
                #returns TypeError: element_to_be_clickable() takes 1 positional argument but 2 were given
    except:
        pass
    
    #download the file
    wait.until(EC.element_to_be_clickable(By.XPATH,
            "/html/body/main/div[2]/div/div/div[2]/div/dl/dd[5]/div[1]/a/text()")).click()
    #returns TypeError: element_to_be_clickable() takes 1 positional argument but 2 were given
    
    print('Execution Time: ', time.process_time() - start)

该脚本在步骤上有两个错误:

  1. 点击"cari“按钮
  2. 并下载文件

,都具有相同的错误消息:

代码语言:javascript
运行
复制
TypeError: element_to_be_clickable() takes 1 positional argument but 2 were given
EN

Stack Overflow用户

回答已采纳

发布于 2022-11-01 08:00:57

而不是

代码语言:javascript
运行
复制
wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR, "#searchButton")).click()

代码语言:javascript
运行
复制
wait.until(EC.element_to_be_clickable(By.XPATH, "/html/body/main/div[2]/div/div/div[2]/div/dl/dd[5]/div[1]/a/text()")).click()

它应该是

代码语言:javascript
运行
复制
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#searchButton"))).click()

代码语言:javascript
运行
复制
wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/main/div[2]/div/div/div[2]/div/dl/dd[5]/div[1]/a/text()"))).click()

相应地。

有关更多解释,请参见this answer

另外,你必须改进你的定位器。长的绝对XPaths是非常脆弱和不可靠的。

另外,这里

代码语言:javascript
运行
复制
inputElement2 = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="yearList"]/option[1]'))).click()

还有这里

代码语言:javascript
运行
复制
inputElement3 = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#periodList > option:nth-child(3)"))).click()

您不需要声明inputElement2inputElement3变量,因为web_element.click()方法不返回任何内容,因此这些变量将获得/保留一个NoneType对象。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74270599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档