使用selenium爬取58同城遇到的登录问题

最近需要在58同城上采集一些信息来做分析,决定使用selenium来进行爬虫。

但是在登录58同城的时候就遇到了问题,使用selenium无法获取到元素。后来看了58同城上面的HTML才发现原因。

58同城登录界面

58同城的登录地址:https://passport.58.com/login,我们看一下这一个区域对应的HTML吧。

用户名是很容易可以被selenium获取到的,但是密码却始终获取不到,仔细看了一下,密码输入栏对应的HTML总共有两条。

这里的两条对应的是啥意思呢?通过查找才发现,这个问题是前端做密码登录的时候经常会使用的一个技巧,第一个inputstyle=”display: inline-block;”,而第二个inputstyle=”display: none;”,实际上,这两个输入框叠加到了一起,我们看到的是第一个input框,而输入需要获取第2个input输入框才可以,只有在你点击了第一个input框,第二个input框才能个改变style的值为style=”display: inline-block;”,只有这样才可以被selenium获取到

那怎么搞?实际上有两个方法。

  1. 直接使用selenium获取第一个input,触发一次点击事件,第二个input框的状态会改变为style=”display: inline-block;”,之后就可以被selenium获取到啦
  2. 使用js,直接修改第二个inputstyle=”display: inline-block;”

方法一这里不阐述了

方法二需要执行以下代码:


1
2
js = "document.getElementById('passwordUser').style.display='block';"
driver.execute_script(js)

执行了这个操作后,就可以使用selenium获取到密码框啦!看一下执行了js后的效果吧!可以看到在下图中,密码框变成了两个,第二个才是有效的密码输入框。

看来爬虫工程师都应该是懂前端的,这个观点是一点都没错。

希望自己的经验可以变得越来越丰富~

发表评论

电子邮件地址不会被公开。

Scroll Up