Python 02 Selenium 账号密码登录CSDN
Python selenium 账号密码登录CSDN
from time import sleep
from selenium import webdriverdef login():url = 'https://passport.csdn.net/login' driver.get(url)driver.find_element_by_link_text('账号密码登录').click() driver.find_element_by_id("all").send_keys(usrname)driver.find_element_by_id("password-number").send_keys(password)driver.find_element_by_css_selector('button[data-type="account"').click() if __name__ == '__main__': # 输入你自己的 手机号/邮箱/用户名(user) 密码(password)usrname = 'user'password = 'password' driver = webdriver.Chrome()login()sleep(10)driver.quit()
知识点 打开一个页面
打开页面与页面交互。对于一个页面中的 HTML 元素,首先我们要找到他。WebDriver 提供了大量的方法帮助你去查找元素,例如:已知一个元素定义如下:
<input type="text" name="passwd" id="passwd-id" />
你可以通过下面的方法查找他:
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
你还可以通过链接的文本查找他,需要注意的是,这个文本必须完全匹地配。 当你使用XPATH
时,你必须注意,如果匹配超过一个元素,只返回第一个元素。 如果上面也没找到,将会抛出 NoSuchElementException
异常。
所以,当你拿到 element 元素时,你能做什么呢?首先,你可能会想在文本框中输入一些内容:
element.send_keys("some text")
你还可以通过”Keys”类来模拟输入方向键:
element.send_keys(" and some", Keys.ARROW_DOWN)
当你输入一些文本时,这些 输入框中原有的文本不会被自动清除掉,相反,你的输入会继续添加到已存在文本之后。 你可以很方便的使用 clear 方法去清除 input 或者 textarea 元素中的内容:
element.clear()
HTML 奶酪的订单列表
<ol id=cheese><li id=cheddar>…<li id=brie>…<li id=rochefort>…<li id=camembert>…
</ol>
一、定位元素
在 WebDriver 中定位元素是在 WebDriver 实例对象上完成的。 findElement(By) 方法返回另一个基本对象类型 WebElement。
- WebDriver 代表浏览器
- WebElement 表示特定的 DOM 节点(控件,例如链接或输入栏等)
一旦你已经找到一个元素的引用,你可以通过对该对象实例使用相同的调用来缩小搜索范围:
cheese = driver.find_element(By.ID, "cheese")
cheddar = cheese.find_elements_by_id("cheddar") # 复数版本
1、元素选择策略
在 WebDriver 中有 8 种不同的内置元素定位策略:
定位器 Locator | 描述 |
---|---|
id | 定位 id 属性与搜索值匹配的元素 |
class name | 定位class属性与搜索值匹配的元素(不允许使用复合类名) |
name | 定位 name 属性与搜索值匹配的元素 |
link text | 定位link text可视文本与搜索值完全匹配的锚元素 |
partial link text | 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。 |
tag name | 定位标签名称与搜索值匹配的元素 |
xpath | 定位与 XPath 表达式匹配的元素 |
css selector | 定位 CSS 选择器匹配的元素 |
2、相对定位
在Selenium 4中带来了相对定位这个新功能。 它可以帮助你通过某些元素作为参考来定位其附近的元素。 现在可用的相对定位有:
- above 元素上
- below 元素下
- toLeftOf 元素左
- toRightOf 元素右
- near 附近
findElement 方法现在支持 witTagName() 新方法其可返回 RelativeLocator 相对定位对象。
3、如何工作
Selenium 是通过使用 JavaScript 函数 getBoundingClientRect() 来查找相对元素的。这个函数能够返回对应元素的各种属性例如:右,左,下,上。
通过下面的例子我们来理解一下关于相对定位的使用
above() 元素上
返回当前指定元素位置上方的WebElement对象
from selenium.webdriver.support.relative_locator import with_tag_namepasswordField = driver.find_element(By.ID, "password")
emailAddressField = driver.find_element(with_tag_name("input").above(passwordField))
below() 元素下
返回当前指定元素位置下方的WebElement对象
from selenium.webdriver.support.relative_locator import with_tag_nameemailAddressField = driver.find_element(By.ID, "email")
passwordField = driver.find_element(with_tag_name("input").below(emailAddressField))
toLeftOf() 元素左
返回当前指定元素位置左方的WebElement对象
from selenium.webdriver.support.relative_locator import with_tag_namesubmitButton = driver.find_element(By.ID, "submit")
cancelButton = driver.find_element(with_tag_name("button").to_left_of(submitButton))
toRightOf() 元素右
返回当前指定元素位置右方的WebElement对象
from selenium.webdriver.support.relative_locator import with_tag_namecancelButton = driver.find_element(By.ID, "cancel")
submitButton = driver.find_element(with_tag_name("button").to_right_of(cancelButton))
near() 附近
返回当前指定元素位置附近大约px5050像素的WebElement对象
from selenium.webdriver.support.relative_locator import with_tag_nameemailAddressLabel = driver.find_element(By.ID, "lbl-email")
emailAddressField = driver.find_element(with_tag_name("input").near(emailAddressLabel))
二、提取节点信息
text 获取文本信息
get_attribute() 获取属性
send_keys() 输入文字
clear() 清空文字
click() 点击按钮
execute_script() 执行JavaScript,可以实现下拉进度条等
switch_to.frame() 切换Frame
back() 后退
forward() 前进
get_cookies() 获取Cookies
add_cookie() 添加一个Cookie
delete_all_cookies() 删除所有的Cookies
此外还可以获取节点的 id、location、tag_name、size 等属性。
三、填写表格
我们已经知道如何在 input 或 textarea 元素中输入内容,但是其他元素怎么办? 你可以“切换”下拉框的状态,你可以使用setSelected
方法去做一些事情,比如 选择下拉列表,处理SELECT
元素其实没有那么麻烦:
element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:print("Value is: %s" % option.get_attribute("value"))option.click()
上面这段代码将会寻找页面第一个 “SELECT” 元素, 并且循环他的每一个OPTION元素, 打印 value 的值,然后按顺序都选中一遍。
正如你看到的那样,这不是处理 SELECT 元素最好的方法。WebDriver 的支持类包括一个叫做 Select
的类,他提供有用的方法处理这些内容:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name('name'))
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value(value)
WebDriver 也提供一些有用的方法来取消选择已经选择的元素:
select = Select(driver.find_element_by_id('id'))
select.deselect_all()
这将取消选择所以的 OPTION。
假设在一个案例中,我们需要列出所有已经选择的选项,Select 类提供了方便的方法来实现这一点:
select = Select(driver.find_element_by_xpath("xpath"))
all_selected_options = select.all_selected_options
获得所选项:
options = select.options
一旦你填写完整个表单,你应该想去提交它,有一个方法就是去找到一个“submit” 按钮然后点击它:
# Assume the button has the ID "submit" :)
driver.find_element_by_id("submit").click()
或者,WebDriver 对每一个元素都有一个叫做 “submit” 的方法,如果你在一个表单内的 元素上使用该方法,WebDriver会在 DOM 树上就近找到最近的表单,返回提交它。 如果调用的元素不再表单内,将会抛出NoSuchElementException
异常:
element.submit()
四、拖放
您可以使用拖放,无论是移动一个元素,或放到另一个元素内:
element = driver.find_element_by_name("source")
target = driver.find_element_by_name("target")from selenium.webdriver import ActionChains
action_chains = ActionChains(driver)
action_chains.drag_and_drop(element, target).perform()
五、在不同的窗口和框架之间移动
WebDriver 支持在不同的窗口之间移动,只需要调用switch_to_window
方法即可:
driver.switch_to_window("windowName")
所有的 driver 将会指向当前窗口,但是你怎么知道当前窗口的名字呢,查看打开他的 javascript 或者连接代码:
<a href="somewhere.html" target="windowName">Click here to open a new window</a>
或者,你可以在”switch_to_window()”中使用”窗口句柄”来打开它, 知道了这些,你就可以迭代所有已经打开的窗口了:
for handle in driver.window_handles:driver.switch_to_window(handle)
你还可以在不同的 frame 中切换 (or into iframes):
driver.switch_to_frame("frameName")
通过“.”操作符你还可以获得子 frame,并通过下标指定任意 frame,就像这样:
driver.switch_to_frame("frameName.0.child")
如何获取名叫“frameName”的 frame 中名叫 “child”的子 frame 呢? 来自topframe的所有的 frame 都会被评估 (All frames are evaluated as if from top.)
一旦我们完成了 frame 中的工作,我们可以这样返回父 frame:
driver.switch_to_default_content()
六、弹出对话框
Selenium WebDriver 内置了对处理弹出对话框的支持。 在你的某些动作之后可能会触发弹出对话框,你可以像下面这样访问对话框:
alert = driver.switch_to_alert()
它将返回当前打开的对话框对象。使用此对象,您现在可以接受、取消、读取其内容, 甚至可以在 prompt 对话框中输入(译注:prompt() 是对话框的一种,不同于 alert() 对话框,不同点可以自行百度)。 这个接口对 alert, confirm, prompt 对话框效果相同。 参考相关的API文档获取更多信息。
七、访问浏览器历史记录
在之前的文章中,我们使用get
命令打开一个页面, ( driver.get(“http://www.example.com”)),WebDriver 有很多更小的,以任务为导向的接口, navigation 就是一个有用的任务,打开一个页面你可以使用get
:
driver.get("http://www.example.com")
在浏览历史中前进和后退你可以使用:
driver.forward()
driver.back()
请注意,这个功能完全取决于底层驱动程序。当你调用这些方法的时候,很有可能会发生意想不到的事情, 如果你习惯了浏览器的这些行为和其他的不同。(原文:It’s just possible that something unexpected may happen when you call these methods if you’re used to the behaviour of one browser over another.)
八、操作Cookies
在我们结束这一节之前,或许你对如何操作 Cookies 可能会很感兴趣。 首先,你需要打开一个页面,因为 Cookie 是在某个域名下才生效的:
# 打开一个页面
driver.get(“http://www.example.com”)
# 现在设置Cookies,这个cookie在域名根目录下(”/”)生效 cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’}
driver.add_cookie(cookie)
# 现在获取所有当前URL下可获得的Cookies
driver.get_cookies()
Python 02 Selenium 账号密码登录CSDN相关推荐
- python验证账号密码登录
python小程序:一段利用循环实现的验证账号密码登录的程序 init_usrname = input("请输入初始用户名:") init_password = input(&qu ...
- python实现账号密码登录
用Python实现账号密码登录 准备 无需数据库 程序简介 运行这个程序,注册后哪怕重新运行,注册的账号依然存在,我们可以把账号密码分别保存到2个txt中,使用的时候再读取txt 为了安全起见,我们可 ...
- 京东实现自动账号密码登录;自动将购物车选中商品下单购买。京东在线抢购
=京东实现自动账号密码登录:自动将购物车选中商品下单购买.京东在线抢购 #!/usr/bin/env python # -*- coding:utf-8 -*-from selenium import ...
- [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...
- 入门,前后端实现简单账号密码登录
前后端实现简单账号密码登录 涉及知识点 原理 效果图 前端代码 index.html res.html login.html main.js info.html error.html WZ.html ...
- 越过 自动化的检测 账号密码登录 不是扫码
大家好我是 J哥 相信很多朋友和我一样在selenium爬取一些网页的时候会被服务器识别出 下面我就推荐大家一个方法只适合账号密码登录的,之前发表过自动化扫码登录和账号密码登录的解决方法,但是又很多的 ...
- QT 记住账号密码登录
弄了个简单的记住账号密码登录功能,适合初学者学习,直接上代码,代码有注释. 喂饭到嘴边了,看你会不会吃啦 开发环境是VS2015 1.由于没有写注册功能,所以账号和密码我提前写在一个ini文件,这个文 ...
- 账号密码登录(Account password authentication)
账号密码登录(Account password authentication) 直到输入账号正确才能输入密码(3次验证机会)并提示剩余次数,(正确的账号和密码信息来自properties文件读取匹配) ...
- mongo 登陆_MongoDB 账号密码登录
配置MongoDB 账号密码登录的步骤如下 (假设有 2 个数据库 admin (自带的) 和 foo): 1.启动 MongoDB: mongod --config /usr/local/etc/m ...
最新文章
- Ignoring unused library classes...java.io.IOException: You have to specify '-keep' options for the s
- Java8 HashMap实现原理探究
- 怎样在不处理的情况下在ABBYY FineReader中添加图像
- JS转字符 判断数字等
- oracle rac常用的网络检查命令
- 泛微协同“风暴”席卷高端市场
- NOIP2018提高组模拟题(六)
- 使用Apache Drill深入研究当今的大数据
- 软件工程---08.软件测试
- 慕课python就业班加微信_给初学python的朋友的一些忠告和建议
- DataGridView常用操作
- 删除上传文件中可能包含的空行
- c语言变量按作用域分类,C语言总结之变量的种类
- redis 哨兵的原理
- javaaop模式供其他项目调用_结构性模型-静态代理模式
- JVM-GC日志分析
- 信用卡积分能兑换现金,靠谱吗?
- 华罗庚 计算机,华罗庚有关计算机的故事
- excel 锁定第一行
- Win7无法修改MAC怎么办 不能修改MAC的原因及解决方法