Python问题解决--driver.get(“www.baidu.com“)报错

一、报错现象:

报错无效参数:selenium.common.exceptions.InvalidArgumentException: Message: invalid argument,其实源码明明有填写要求为str的参数,所以很不理解为啥无效参数。

二、环境配置和核心代码

Python版本:3.12.1

selenium版本:4.18.1

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

driver.get(url="www.baidu.com")  # 这里报错

driver.quit()

三、分析原因

1、从上面代码的逻辑分析,开始理解是,程序加载google驱动,打开google浏览器,地址栏输入:www.baidu.com。完全是一个正常操作,为啥会在driver.get(url="www.baidu.com")抛出了异常,最多是地址访问失败,浏览器无法访问该页面,为啥浏览器会异常退出。

2、于是对上面的程序打断点进行debug调试,发现selenium的运行逻辑是加载google驱动类似启动了一个后端服务,我们使用selenium封装好的API进行操作,相当于给驱动发送我们操作的请求,驱动再将该请求以浏览器能读懂的形式提供给浏览器,然后得到浏览器的数据返回即下图的response,驱动会对response的状态判断,如果有异常返回值就会抛出异常。

3、继续断点往下一层分析execute函数的执行,发现确实是发送了request,同时可以看到返回的status数据为400。得到了异常返回,驱动进行异常处理,关闭浏览器。到此处基本知道了为什么浏览器会关闭,因为产生了异常返回。但是还有一点没有弄清楚,就是为什么输入:www.baidu.com会有异常返回。了解到selenium不会自动添加协议头数据,继续探索一下。

4、出于测试的本能,我修改一下driver.get的地址如下图,使用正确协议和不正确协议测试一下看看selenium会有什么样的反应。

结果神奇的事情发生了,如果地址里面携带了 ":" 号,那么是不会有异常产生的,如果没有携带冒号,就会出现这种异常。这究竟是selenium的本身Bug呢,还是设计如此,还是说协议就是通过冒号进行断定的,就需要进行请求发送的分析了,请求发送的过程中究竟进行了怎么样的数据转换,还有浏览器怎么处理不带冒号的地址。大家可以打断点尝试一下,该问题到这里结束,下面进行问题解决。

四、问题修改

问题修改步骤很简单,在地址中增加":"即可,要想正确访问地址,加上协议头"https://"即可完成此报错的修改。但是知道原因也很重要,提升下次遇到问题的自我分析能力。

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

driver.get(url="https://www.baidu.com")  # 解决无效参数报错

driver.quit()

好好学习,天天向上。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值