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相关推荐

  1. python验证账号密码登录

    python小程序:一段利用循环实现的验证账号密码登录的程序 init_usrname = input("请输入初始用户名:") init_password = input(&qu ...

  2. python实现账号密码登录

    用Python实现账号密码登录 准备 无需数据库 程序简介 运行这个程序,注册后哪怕重新运行,注册的账号依然存在,我们可以把账号密码分别保存到2个txt中,使用的时候再读取txt 为了安全起见,我们可 ...

  3. 京东实现自动账号密码登录;自动将购物车选中商品下单购买。京东在线抢购

    =京东实现自动账号密码登录:自动将购物车选中商品下单购买.京东在线抢购 #!/usr/bin/env python # -*- coding:utf-8 -*-from selenium import ...

  4. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  5. 入门,前后端实现简单账号密码登录

    前后端实现简单账号密码登录 涉及知识点 原理 效果图 前端代码 index.html res.html login.html main.js info.html error.html WZ.html ...

  6. 越过 自动化的检测 账号密码登录 不是扫码

    大家好我是 J哥 相信很多朋友和我一样在selenium爬取一些网页的时候会被服务器识别出 下面我就推荐大家一个方法只适合账号密码登录的,之前发表过自动化扫码登录和账号密码登录的解决方法,但是又很多的 ...

  7. QT 记住账号密码登录

    弄了个简单的记住账号密码登录功能,适合初学者学习,直接上代码,代码有注释. 喂饭到嘴边了,看你会不会吃啦 开发环境是VS2015 1.由于没有写注册功能,所以账号和密码我提前写在一个ini文件,这个文 ...

  8. 账号密码登录(Account password authentication)

    账号密码登录(Account password authentication) 直到输入账号正确才能输入密码(3次验证机会)并提示剩余次数,(正确的账号和密码信息来自properties文件读取匹配) ...

  9. mongo 登陆_MongoDB 账号密码登录

    配置MongoDB 账号密码登录的步骤如下 (假设有 2 个数据库 admin (自带的) 和 foo): 1.启动 MongoDB: mongod --config /usr/local/etc/m ...

最新文章

  1. Ignoring unused library classes...java.io.IOException: You have to specify '-keep' options for the s
  2. Java8 HashMap实现原理探究
  3. 怎样在不处理的情况下在ABBYY FineReader中添加图像
  4. JS转字符 判断数字等
  5. oracle rac常用的网络检查命令
  6. 泛微协同“风暴”席卷高端市场
  7. NOIP2018提高组模拟题(六)
  8. 使用Apache Drill深入研究当今的大数据
  9. 软件工程---08.软件测试
  10. 慕课python就业班加微信_给初学python的朋友的一些忠告和建议
  11. DataGridView常用操作
  12. 删除上传文件中可能包含的空行
  13. c语言变量按作用域分类,C语言总结之变量的种类
  14. redis 哨兵的原理
  15. javaaop模式供其他项目调用_结构性模型-静态代理模式
  16. JVM-GC日志分析
  17. 信用卡积分能兑换现金,靠谱吗?
  18. 华罗庚 计算机,华罗庚有关计算机的故事
  19. excel 锁定第一行
  20. Win7无法修改MAC怎么办 不能修改MAC的原因及解决方法

热门文章

  1. 文献 | fMRI入门指南
  2. Hadoop系列之-7、Hadoop3.x的介绍
  3. C# 让程序开机自动运行的方法
  4. Axis1.4发布WebService
  5. Transition 调用方法分析
  6. win7网络发现启用后找不到网络计算机,win7启用网络发现怎么又关闭了怎么解决...
  7. 【测试用例练习】二、手机app测试点
  8. 计算机素养的论文,核心素养下计算机程序设计教学探索
  9. 通过批处理文件bat批量修改图片名称
  10. 使用AHK减少鼠标和方向键的使用频率,高效编辑