selenium.common.exceptions.InvalidArgumentException:消息:使用 Selenium Python 从文本文件读取的 URL 调用 get() 时参数无
Posted
技术标签:
【中文标题】selenium.common.exceptions.InvalidArgumentException:消息:使用 Selenium Python 从文本文件读取的 URL 调用 get() 时参数无效错误【英文标题】:selenium.common.exceptions.InvalidArgumentException: Message: invalid argument error invoking get() with urls read from text file with Selenium Python 【发布时间】:2020-05-02 11:13:34 【问题描述】:我有一个 .txt 文件中的 URL 列表,我想使用 selenium 运行。
假设文件名为 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)
对如何重写代码有什么建议吗?
【问题讨论】:
“失败”是什么意思?你有例外吗?如果是这样,消息和堆栈跟踪是什么?我们需要这些基本信息。 在driver.get(link)
上方的for循环中添加一行print(link)
。
当“代码失败”是什么意思?错误信息是什么?如果你只运行for url in url_rpt: print(url)
会发生什么。这可能不是 Selenium 的问题,但可能是 url
输入和阅读策略。这将有助于缩小 Selenium 是否真的引发错误,或者问题是否与文件有关。
我会在帖子上更新这个。
@Christine:谢谢!如果我运行 for url in url_rpt: print (ur)
它会返回两个链接就好了。
【参考方案1】:
我也遇到了类似的问题,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')
【讨论】:
仅供参考,如果我们只是打印要检查的 URL,这些额外的字符(例如 ZWNBSP )可能不可见。【参考方案2】:此错误消息...
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)
...暗示作为参数传递给get()
的url
是无效的参数。
当包含 url 列表的 text 文件在最后一个网址。可能有一个 空格字符 出现在 b.txt 的 fag 末尾,为 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/', ' ']
解决方案
如果您从末尾删除 空格字符,您自己的代码将完美执行:
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
url = open ('url_list.txt','r')
url_rpt = url.read().split(",")
print(url_rpt)
for link in url_rpt:
driver.get(link)
driver.quit()
【讨论】:
发现列表末尾有逗号!非常感谢您强调这一点! 当我忘记用https://
启动网址时遇到了同样的错误
与@philomath 相同,我在 driver.get() 函数上遇到了该异常,我通过使用 http:// 作为前缀解决了它(在我的情况下为 http://localhost)
我在函数内使用多行字符串添加一个列表,在其上调用 .splitlines() ,并将缩进计算为具有四个空格的新数组元素。谢谢!以上是关于selenium.common.exceptions.InvalidArgumentException:消息:使用 Selenium Python 从文本文件读取的 URL 调用 get() 时参数无的主要内容,如果未能解决你的问题,请参考以下文章