簡體   English   中英

從函數添加 driver.get() 值時,Selenium 無效參數

[英]Selenium Invalid Argument when added driver.get() value from a function

更新/解決方案

我決定稍微修改一下代碼。 我最終使用 pandas read_csv 打開 urls.csv 並使用 iterrows() 遍歷 df 列。 現在一切正常。 下面是更新后的代碼片段。

df = pd.read_csv(urls, header=0, encoding="utf8", index_col=False)

for index, row in df.iterrows():
    report_type = row[0]
    report_name = row[1]
    file_name = row[2]
    download_report(report_type, report_name, file_name)

----

我正在使用 Selenium 自動化一些報告下載。 我寫的原始 python 腳本太重復了,所以我決定把東西組合成一個函數。 此功能導航到系統中的特定位置,通過匹配名稱生成報告,下載報告並移動/重命名它。

def download_report(q_type, report_name, file):
    driver.get(q_type)
    driver.find_element_by_xpath("//select[@name='SavedQueriesDropDownList']/option[text()='%s']" % report_name).click()
    driver.implicitly_wait(3)
    driver.find_element_by_xpath("//input[@type='submit' and @value='Run Query']").click()
    driver.implicitly_wait(3)
    driver.find_element_by_id('exportsLinksDiv').click()
    driver.implicitly_wait(3)
    driver.find_element_by_id('ListToolbarRAWEXCELExportLink').click()
    time.sleep(5)
    filename = max([path + "\\" + f for f in os.listdir(path)], key=os.path.getctime)
    print(filename)
    os.rename(filename, out_path + file)

我在一個包含三列的 csv 文件中擁有該函數需要的所有數據:q_type,它是起始 URL 路徑,report_name,它告訴驅動程序要選擇哪個報告,file 是我希望下載的文件的文件名改名為.

我將所需的值傳遞給函數,如下所示:

with open(urls, encoding="utf8") as csvfile:
      reader = csv.reader(csvfile, delimiter=',', quotechar='|')
      for row in reader:
          report_type = row[0]
          report_name = row[1]
          file_name = row[2]
          download_report(report_type, report_name, file_name)

當我運行腳本時,函數 driver.get(q_type) 的第一行出現錯誤:

Traceback (most recent call last):
  File "C:/nf4.py", line 52, in <module>
    download_report(report_type, report_name, file_name)
  File "C:/nf4.py", line 10, in download_report
    driver.get(q_type)
  File "C:\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 333, in get
    self.execute(Command.GET, {'url': url})
  File "C:\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument
  (Session info: chrome=76.0.3809.100)

為了測試,我從函數中打印出 q_type 的值,並可以確認它從 csv 文件中提取 url 並將其作為字符串提取。 真的不確定錯誤來自哪里。

我正在使用以下驅動程序設置:

# Setup Chrome Driver
chrome_path = r'C:\drivers\chromedriver.exe'
chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : r'C:\data-in\raw'}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_path, options=chrome_options)

我懷疑您的 q_type 在 URL 前沒有領先的 http://(或 https://)。 這會導致您看到的錯誤消息。 您能否驗證是否是這種情況?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM