python selenium 登陆CSDN
初入selenium,想着经常使用CSDN写东西,就来写一个模拟登录CSDN的,完全没有想像的顺利;
先来说一下整个selenium的思路以及在整个写的过程中需要注意的点:
- 如果设定了窗口的大小,需要确定当前查找的元素能不能在有限的画幅中显示出来,如果窗口过小,会导致失败,可以选择最大化:
- 在页面跳转时,需要更新到新的页面,此时需要进行处理,详见代码的for 循环;
- 当页面没有跳转时,但是页面发生了变化,则需要进行等待(显式等待或者隐式等待均可,但是前者会更智能一些,有种轮询的感觉):
文章图片
页面1,页面2,
文章图片
点击“账号登录之后”,根据id='all'在当前页面寻找时,并找到这个id,而是需要在更新之后的页面寻找ID,在这里弄了很久才解决,因为前端知识的薄弱,很是尴尬;
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWaitdriver = webdriver.Chrome()
driver.maximize_window()#窗口最大化
driver.get('https://www.csdn.net/')
sleep(1)username ="*****"
passwd ="*********"browser = driver.find_element_by_link_text('登录')
browser.click()#跳转到新的窗口
f_win = driver.current_window_handle
handles = driver.window_handlesfor win in handles:
if win != f_win:
driver.switch_to_window(win)
sleep(2)login = driver.find_element_by_xpath("//div[@class='main-select']/ul/li[2]/a[text() ='账号登录']")
login.click()3页面发生跳转
# driver.implicitly_wait(20)#隐士等待,使用本行也可行
WebDriverWait(driver, 10, 0.2).until(lambda i: i.find_element_by_id("all"))#主动,发现标签时,停止等待driver.find_element_by_id("all").send_keys(username)
print(11111)
# driver.find_element_by_id("password").clear()
driver.find_element_by_id("password-number").send_keys(passwd)login = driver.find_element_by_xpath("//button[@class='btn btn-primary']")
login.click()
sleep(2)driver.quit()
driver.find_element_by_xpath("//div[@class='main-select']/ul/li[2]/a[text() ='账号登录']")
代码解读:
首先来看一下前端代码的结构:
文章图片
【python selenium 登陆CSDN】前端基础比较薄弱,按照我自己理解的地方来分析代码:按照DOM树,依次查看有几层
首先是标签的顺序是:div-ul-li-a:其中div下仅有一个ul,li列表中有多个元素,但是我们使用是账号登录,是第二个因此代码是li[2],随后就a标签的文本内容;
这之间是一个层层过滤的过程,并过滤出来了具体的兄弟元素li[2],
xpath的结构简介如下:
- /(绝对路径,从根节点选取)
- //(相对路径,所有子代节点,不用考虑是否直接子节点)
- @ 选取属性
- “.”选取当前节点
- “..”选取当前节点的父节点;
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 单点登陆
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)