[英]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.