Python 用 ChromeDriver 实现登录和签到

Python 用 ChromeDriver 实现登录和签到 (qq.com)

0 前言

上个星期天,老师给我一堆账号,让我测试一下他们有没有去修改密码,我随手测试了几个之后发现有 500+ 个账户,想都没想就着手写代码了。

是用 Python 实现的,再加上一个 ChromeDriver 。不过这个代码不能公布出来,不然我就要喝茶了Image

好在之前写过类似的代码,能把以前写过的代码拿出来做例子,还行,又不是不能用Image

1 下载

Win10 系统下 Python3,编译器是 Pycharm 。需要安装 selenium ,安装失败的话可以看这篇文章,里面有相关的教程。

https://sites.google.com/a/chromium.org/chromedriver/downloads

进入之后看一下谷歌浏览器的版本和 ChromeDriver 所支持的版本,如果是合适的,那就直接下载最新的 ChromeDriver。

Image


如果想下载别的版本的 ChromeDriver,直接修改 path= 后面的数字就好。

Image


下载完成后解压,可以把解压后的文件放在别的地方,我是放在了谷歌浏览器的目录下,因为这样相对来说比较好找。

Image

别的浏览器也有对应的 Driver,可以自行前去下载。

https://selenium-python.readthedocs.io/installation.html

Image

2 使用

先导入 webdriver 和 time,time 是用来防止操作过快。

import time
from selenium import webdriver

对 webdriver 进行设置,我习惯了用隐身模式打开;driver_path 是 chromedriver.exe 的路径,

options = webdriver.ChromeOptions()
options.add_argument("--incognito")  # 隐身模式打开
driver_path = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"  # chromedriver.exe 的路径
browser = webdriver.Chrome(executable_path=driver_path, options=options)

这里我用的是 css_selector,因为相对来说比较简单。

get() 方法是打开链接; send_keys() 方法是把内容填写上去;click() 方法是模拟点击。

time.sleep(3) 是推迟 3 秒再去执行,也就是暂停 3 秒。

browser.get("https://kejibear.xyz/auth/login")  # 网址
browser.find_element_by_css_selector(".card-inner input[name='Email']").send_keys("@qq.com")  # 账号
browser.find_element_by_css_selector(".card-inner input[name='Password']").send_keys("1")  # 密码
browser.find_element_by_css_selector(".row .col-md-10.col-md-push-1 button.waves-effect").click()
print("登录成功~")
time.sleep(3)

这里和上面是一样的,不过是已经登录进去之后再执行。close()方法是关闭浏览器。

browser.find_element_by_css_selector(".card-action-btn #checkin-btn button.waves-effect").click()
print("签到成功~")
time.sleep(5)
browser.close()

把上面的代码依次复制到运行环境中,然后修改网址,修改账户和密码就能实现自动登录和签到了。

这个代码适用于大部分的酸酸乳网站,只要是那一套模板改出来的都适用。

3 说明

可以使用PhantomJS(无头浏览器),来达到目的,不过我懒得写了。

http://phantomjs.org/

在使用中可能会遇到要判断是否登录进去的情况,有一个思路是判断有没有登录成功后特有的元素,如果有则执行代码;如果没有,则执行别的代码。

例如:

try:  
    browser.find_element_by_css_selector(".confirm-content input[type='submit']")
    #  遇到异常则执行 except: 的代码,如果没有,正常执行。
    print(uid)
    browser.close()
except:
    browser.close()

当我写完这篇文字之后我发现原来我之前写过类似的文章, 这个就有点尴尬了Image

用 selenium 和 scrapy 模拟知乎登录

 weijunzi 君子的梦呓 2018-07-27 22:52

0 前言

这个是看一个视频学来的,视频给出的教程部分失效,因为知乎的登录页面改了。我进行一点修改就可以登录了,本文主要是记录

1 环境说明

Win10 系统下 Python3,编译器是 Pycharm 。需要安装 selenium 和 scrapy,安装的话可以考虑看这篇文章,这里不赘述。

这里还需要下载一个 Drivers,比如我用的是 Chrome 浏览器就下载 chromedriver,别的浏览器下载对应的 driver 就好

链接:http://selenium-python.readthedocs.io/installation.html

Image

如果你因为无法【翻越思维的墙】而下载不了chromedriver.exe,而且巧好是 Windows 的话,可以去下面这下载

链接: https://pan.baidu.com/s/1Xz3ezvBVF4BwMYhV4pjaKg
密码: fpqc

下载回来后需要把路径记住,比如我就把 chromedriver.exe 放在了 C:/Program Files (x86)/Google/Chrome/Application/ 下。

2 实现

代码有点多,所以是分开来的,用的时候按顺序复制就好。

先导入要用的库

from selenium import webdriver
from scrapy.selector import Selector

接着就是对浏览器进行设置,chromedriver 的路径记得要修改一下

options = webdriver.ChromeOptions()
options.add_argument("--incognito")  # 隐身模式打开,可以注释掉
driver_path = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe"  # chromedriver 的路径
browser = webdriver.Chrome(executable_path=driver_path, chrome_options=options)
browser.get("https://www.zhihu.com/")  # 知乎网址

最后就是模拟点击和输入,记得把账号和密码修改一下

t_selector = Selector(text=browser.page_source)
browser.find_element_by_css_selector(".HomeSidebar-signBannerActions button.HomeSidebar-signBannerButton").click()  # 点击右侧登录
browser.find_element_by_css_selector(".SignFlow-accountInput.Input-wrapper input[name='username']").send_keys("你的账号")  # 账号
browser.find_element_by_css_selector(".SignFlowInput .Input-wrapper input[name='password']").send_keys("你的账号密码")  # 密码
browser.find_element_by_css_selector(".Login-content button.SignFlow-submitButton").click()  # 点击登录

实际效果可以看下面这个视频

3 说明

登录完之后就可以开搞了ImageImage

原文链接是我博客上这篇文章的链接,要是这篇有更新,只会在那更新。

安装说明:http://selenium-python.readthedocs.io/installation.html

官方文档:https://seleniumhq.github.io/selenium/docs/api/py/

题图:Photo by Radovan on Unsplash

posted @ 2023-08-11 13:55  CharyGao  阅读(182)  评论(0)    收藏  举报