selenium.common.exceptions.InvalidArgumentException:消息:使用Selenium Python从文本文件读取的URL调用get()的无效参数错误

时间:2020-01-15 16:22:43

标签: python list selenium for-loop selenium-webdriver

我有一个要使用硒运行的.txt文件中的URL列表。

可以说文件名是b.txt,其中包含2个url(格式如下): https://www.google.com/,https://www.bing.com/

我想做的是让selenium运行两个URL(来自.txt文件),但是似乎每次代码到达“ driver.get”行时,代码都会失败。

url = open ('b.txt','r')
url_rpt = url.read().split(",")
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
for link in url_rpt:
   driver.get(link)
driver.quit()

运行代码时得到的结果是

Traceback (most recent call last):
File "C:/Users/ASUS/PycharmProjects/XXXX/Test.py", line 22, in <module>
driver.get(link)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site- 
packages\selenium\webdriver\remote\webdriver.py", line 333, in get
self.execute(Command.GET, {'url': url})
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\lib\site- 
packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python38\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: headless chrome=79.0.3945.117)

关于如何重新编写代码的任何建议?

2 个答案:

答案 0 :(得分:5)

此错误消息...

Traceback (most recent call last):
  .
    driver.get(link)
  .
    self.execute(Command.GET, {'url': url})
  .
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument
  (Session info: chrome=79.0.3945.117)

...表示作为参数传递给url的{​​{1}}是无效的。

当包含网址列表的 text 文件在分隔符后包含空格时,我能够重现相同的 Traceback 。最后一个网址。可能在 b.txt 的结尾处以get()的形式出现空格字符


调试

一种理想的调试方法是打印https://www.google.com/,https://www.bing.com/,,它会显示如下的空格字符

  • 代码块:

    url_rpt
  • 控制台输出:

    url = open ('url_list.txt','r')
    url_rpt = url.read().split(",")
    print(url_rpt)
    

解决方案

如果从头删除空格字符,您自己的代码将执行完美:

['https://www.google.com/', 'https://www.bing.com/', ' ']

答案 1 :(得分:0)

我也遇到过类似的问题,Selenium 在打开 URL 时出错并打印以下消息:

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument
  (Session info: MicrosoftEdge=91.0.852.0)

仔细查看,我发现我的 url 字符串是 'UTF-8' 并且包含一个前导 ZWNBSP 字符,因此 selenium 无法接受该 URL(我正在从文件中读取 url 列表,导致这个)。 IMO,selenium 应该更好地报告错误(说 URL 参数无效)。

为了解决这个问题,我使用了下面的代码来清理我的 URL:

url = url.encode('ascii', 'ignore').decode('unicode_escape')