python+seleniu如何记录cookies

python+seleniu如何记录cookies,第1张

1 保存cookie到文件中

cookies = selfbrowserget_cookies()

jsonCookies = jsondumps(cookies)

with open('cookiesjson', 'w') as f:

fwrite(jsonCookies)

 

2从文件中读取cookie

 

selfbrowserget(selfstart_url)

selfbrowserdelete_all_cookies()

with open('cookiesjson', 'r', encoding='utf-8') as f:

listCookies = jsonloads(fread())

for cookie in listCookies:

selfbrowseradd_cookie({

'domain': cookie['domain'],

'name':cookie['name'],

'value':cookie['value'],

'path':'/',

'expires':None

})

selfbrowserget(selftarget_url)

 

您好,很高兴能帮助您那么使用动态密码或验证码的网站我们就无法自动化测试了么?答案是不一定,因为有些网站登陆后会在cookie中写入当前用户的登录态,于是只要登陆一次该站点,那么下次访问的时候就不需要再登陆了。因此我们需要让浏览器为我们保存cookie以使得我们可以不需要登陆站点就能进行自动化测试。但是selenium或watirwebdriver默认启动的时候是没有加载已存在cookie的。其实这个问题的解决方法非常简单。Watir::Browsernew(:firefox,{:profile=>'default'})#watirwebdriverSelenium::WebDriverfor(:firefox,:profile=>'default')#selenium2在启动浏览器的时候加上defaultprofile就能解决这个问题了。你的采纳是我前进的动力,记得好评和采纳,答题不易,互相帮助,

AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行局部更新。传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面。

因为传统的网页在传输数据格式方面,使用的是 XML 语法,因此叫做 AJAX ,其实现在数据交互基本上都是使用 JSON 。使用AJAX加载的数据,即使使用了JS将数据渲染到了浏览器中,在 右键->查看网页源代码 还是不能看到通过ajax加载的数据,只能看到使用这个url加载的html代码。

法1:直接分析ajax调用的接口。然后通过代码请求这个接口。

法2:使用Selenium+chromedriver模拟浏览器行为获取数据。

Selenium 相当于是一个机器人。可以模拟人类在浏览器上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。 chromedriver 是一个驱动 Chrome 浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:

现在以一个简单的获取百度首页的例子来讲下 Selenium 和 chromedriver 如何快速入门:

参考:Selenium的使用

直接直接分析ajax调用的接口爬取

selenium结合lxml爬取

也许你在浏览一些网页的时候会遇到这种情况,有的网页的内容会设置为登录可见。

如果想要用driver去驱动浏览器浏览隐藏内容的话,就需要事先给它添加cookie信息,这几天使用的时候遇到了一些坑,简单说明下。

首先,我们先创建一个driver:

创建出来的driver专门有一个添加cookie信息的方法 driveradd_cookie() ,他接受的参数是一个字典。回到本文正题,下面说说坑。

add_cookie() 方法接受的字典参数的键名不是随意起的。

不能想当然地分解获取到内容的等号左右的信息。他的键名都是有意义的,一般记住 name 和 value 即可,分别代表cookie的名称和动态生成的值。

确保获取到的cookie内容是有效的。

举个栗子,这是我在登陆某网站后看到的cookie内容:

当然,不知道的话也可以多尝试,但如果你是第一次使用 add_cookie() 方法,建议你一定要在尝试前先看看坑三!

当你高高兴兴地进入目标网址,并想给driver添加好cookie信息:

它可能会报错,注意,这里说的是可能。

如果你遇到了类似 Message: unable to set cookie 的错误,建议使用更稳妥的方式:

就是说,在登录页面添加cookie信息,然后再访问目标网址。

如有错误,欢迎指正~

可以使用Python脚本实现挂机领多个账号的救济金。步骤如下:

1准备工作:安装Python环境,安装selenium库,用selenium登录多个账号,获取cookie值。

2编写代码:编写Python脚本,模拟用户登录,获取每个账号的cookie值,以及相应的领取救济金链接,并将每个账号的cookie值和领取链接封装成一个字典,放入列表中。

3模拟点击:使用selenium库,遍历列表中的字典,分别获取每个账号的cookie值和领取链接,模拟点击领取链接,完成救济金领取。

4定时任务:将脚本加入定时任务,以实现挂机领取多个账号的救济金。

单选比较好 *** 作,先定位需要单选的某个元素,然后点击一下即可。

多选好像也比较容易,依次定位需要选择的元素,点击即可。

下拉框的 *** 作相对复杂一些,需要用到Select模块。

先导入该类

在select模块中有以下定位方法

测试页面

然后,再演示下拉框的不同选择的方式

Selenium打开一个页面之后,默认是在父页面进行 *** 作,此时如果这个页面还有子页面,想要获取子页面的节点元素信息则需要切换到子页面进行擦走,这时候switch_toframe()就来了。如果想回到父页面,用switch_toparent_frame()即可。

既然是模拟浏览器 *** 作,自然也就需要能模拟鼠标的一些 *** 作了,这里需要导入ActionChains 类。

左键

这个其实就是页面交互 *** 作中的点击click() *** 作。

右键

context_click()

在上述 *** 作中

双击

double_click()

drag_and_drop(source,target)拖拽 *** 作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的 *** 作之类。

selenium中的Keys()类提供了大部分的键盘 *** 作方法,通过send_keys()方法来模拟键盘上的按键。

引入Keys类

常见的键盘 *** 作

send_keys(KeysBACK_SPACE):删除键(BackSpace)

send_keys(KeysSPACE):空格键(Space)

send_keys(KeysTAB):制表键(TAB)

send_keys(KeysESCAPE):回退键(ESCAPE)

send_keys(KeysENTER):回车键(ENTER)

send_keys(KeysCONTRL,'a'):全选(Ctrl+A)

send_keys(KeysCONTRL,'c'):复制(Ctrl+C)

send_keys(KeysCONTRL,'x'):剪切(Ctrl+X)

send_keys(KeysCONTRL,'v'):粘贴(Ctrl+V)

send_keys(KeysF1):键盘F1

send_keys(KeysF12):键盘F12

实例 *** 作演示:

定位需要 *** 作的元素,然后 *** 作即可!

如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。

等待有三种方式:强制等待、隐式等待和显式等待

1强制等待

直接timesleep(n)强制等待n秒,在执行get方法之后执行。

2隐式等待

implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。

3 显式等待

设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。

WebDriverWait的参数说明:

WebDriverWait(driver,timeout,poll_frequency=05,ignored_exceptions=None)

driver: 浏览器驱动

timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

poll_frequency: 每次检测的间隔时间,默认是05秒

ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

until(method,message='')

method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not(method,message='')

until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

其他等待条件

还有一些 *** 作,比如下拉进度条,模拟javaScript,使用execute_script方法来实现。

在selenium使用过程中,还可以很方便对Cookie进行获取、添加与删除等 *** 作。

输出:

本章节主要内容:

switch_to适用场景:

处理JSd框

切换frame

切换浏览器窗口

Switch_to处理JSd框

JavaScript简称JS,应用于HTML网页,通过 *** 纵网页窗口及网页元素,从而实现动态效果。

JSd框类型:警告框alert、确认框confirm、提示框prompt

浏览器窗口中如果有JavaScript的d出框,需要通过switch_to语句处理。

相关方法:

Switch_to切换窗口

浏览器中有多个窗口时,如果想切换到其他窗口 *** 作,需要调用switch_to方法

切换到目标窗口:

相关方法:

示例:

Switch_to切换frame

如果元素在html的frame或iframe中,则无法直接定位到元素。需要先切换到该frame中,再进行定位及其他 *** 作。

相关方法:

一般来说我们与页面的交互可以使用WebElement的方法来进行点击等 *** 作。但是有时候我们需要一些更复杂的动作,就需要用到我们的Action Chains了。

通过action对象模拟鼠标 *** 作,如双击,右击,拖拽,悬停等 *** 作:

普通键:

有名按键:

无名按键:a-z,0-9

修饰键:

修饰键单独使用没有意义,一般和别的按键配合使用。

Actions *** 作:

使用示例

输入大写或按键上方的字符:

JS,JavaScript的简称,广泛用于HTML网页,通过 *** 纵网页窗口及网页元素,从而实现动态效果。

webdriver无法完成的 *** 作,可以由JS配合完成。

示例:

参考JS:

获取标题:documenttitle

d出提示框:alert('我是一个d框');

改变元素属性:q=documentgetElementById('kw');qstyledisplay='block';

Selenium-JS处理滚动条

通过js实现滚动条拖动效果:

移动元素到窗口顶部:

移动元素到窗口底部:

窗口移动指定距离:

移动窗口到某位置:

input标签上传:借用input元素的sendkeys方法实现

示例:

非input标签上传---借用其他工具如autoIt:

• 用于Windows GUI自动化 *** 作

• 通过它可以组合使用模拟键击、鼠标移动和窗口/控件 *** 作等来实现自动化任务。

• 它使用类似BASIC的脚本语言。

• 可以通过转换工具把脚本转换为exe文件

应用程序从安全考虑,都在登录或某 *** 作节点使用验证码。

验证码是一种区分用户是计算机还是人的公共全自动程序。

自动化时验证码处理方式:

cookie的 *** 作:

Selenium-截图 *** 作

截图:

以上就是关于python+seleniu如何记录cookies全部的内容,包括:python+seleniu如何记录cookies、selenium 怎么通过cookies登录、从零开始学Python-使用Selenium抓取动态网页数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9545165.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存