from selenium import webdriver
from selenium.webdriver.common.keys import Key
driver= webdriver.Chrome()
driver.get('https://mail.qq.com/cgi-bin/loginpage')
driver.maximize_window()
frame = driver.find_element_by_id('login_frame')
driver.switch_to_frame(frame)
driver.find_element_by_id('u').send_keys('*******')
driver.find_element_by_id('p').send_keys('*******')
driver.find_element_by_id('p').send_keys(Keys.ENTER)
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
from selenium import webdriver
from selenium.webdriver.common.keys import Key
driver= webdriver.Chrome()
driver.get('https://mail.qq.com/cgi-bin/loginpage')
driver.maximize_window()
其实实现自动打开浏览器并访问指定网站的核心代码就两行:
driver = webdriver.Chrome()
driver.get(‘https://mail.qq.com/cgi-bin/loginpage’)
(这里为了隐藏我的账号密码,我就用*****代替了。)
driver.find_element_by_id('u').send_keys('*******')
driver.find_element_by_id('p').send_keys('*******')
我们列一下完整的代码
from selenium import webdriver
from selenium.webdriver.common.keys import Key
driver= webdriver.Chrome()
driver.get('https://mail.qq.com/cgi-bin/loginpage')
driver.maximize_window()
driver.find_element_by_id('u').send_keys('*******')
driver.find_element_by_id('p').send_keys('*******')
我们先来运行代码检测一下。
结果发现,浏览器一如既往自动打开了QQ邮箱登录网站,但是却没有自动输入我们的账号和密码。
返回检查代码,同样我们发现了程序报错:
Message: no such element: Unable to locate element: {“method”:“css selector”,“selector”:"[id=“u”]"}
也就是程序并没有找到我们的
的元素位置。
这是为什么?难道我们选择的方法和特征错误了?
可是在开发者工具中我们明明定位到了且唯一?
骚年,莫要慌!
之前说过,通常我们定位不到元素的问题有三:
页面请求超时
元素定位方法不对
页面存在iframe或内嵌窗口
首先,页面请求正常,网站是正常打开并显示出输入账号和密码框的;
其次,我们也坚信自己使用的元素定位方法正确;
最后,通常来说就是页面中存在iframe或内嵌窗口。
那么我们来检查一下,按【Ctrl+F】打开查找框,输入
“iframe”
,然后【回车】。
发现果然存在内部框架结构,且我们的输入账号和密码的代码也在iframe内部。
找到了为什么定位不到元素的原因,接下来就好办了。
from selenium import webdriver
from selenium.webdriver.common.keys import Key
完整的代码如下:
from selenium import webdriver
from selenium.webdriver.common.keys import Key
driver= webdriver.Chrome()
driver.get('https://mail.qq.com/cgi-bin/loginpage')
driver.maximize_window()
driver.find_element_by_id('u').send_keys('*******')
driver.find_element_by_id('p').send_keys('*******')
我们再运行代码,成功实现了账号密码的自动输入。
为了方便,我们采用程序自动按下【Enter键】的方式来实现最终的登陆,最终实现的代码也很简单,也不需要重新定位元素,直接在上面定位元素基础上按下【Enter键】。
driver.find_element_by_id('p').send_keys(Keys.ENTER)
我们来看看最终的效果
from selenium import webdriver
from selenium.webdriver.common.keys import Key
driver= webdriver.Chrome()
driver.get('https://mail.qq.com/cgi-bin/loginpage')
driver.maximize_window()
frame = driver.find_element_by_id('login_frame')
driver.switch_to_frame(frame)
driver.find_element_by_id('u').send_keys('*******'
)
driver.find_element_by_id('p').send_keys('*******')
driver.find_element_by_id('p').send_keys(Keys.ENTER)
整个也就10行代码,却大大地方便了我们的日常工作生活,从此我们再也不用担心忘记账号密码了,可以用极快的速度秒登各大网站,甚至当你需要回忆账号密码的时候只需要打开源代码便可知道了。
(如果遇到要输入验证码的网站,可能就无法实现全流程,但是自动打开网站并输入账号和密码还是能够实现的)
正如最开始所说,当然虽然代码很短,需要的前置知识也不少,除了懂得Python,还必须对selenium库、HTML和CSS、环境变量等有所了解才可以。