selenium详细讲解

一、截屏与获取

1.截屏

1.导入包,定位搜索框并输入内容,定位搜索按钮并点击

from selenium import webdriver
import time
chrome = webdriver.Chrome()
chrome.maximize_window()

chrome.get('https://www.baidu.com')

chrome.find_element_by_id('kw').send_keys('孙兴华B站')

chrome.find_element_by_id('su').click()

2.截取屏幕

time.sleep(2)
chrome.save_screenshot('e:/11.png')

2.获取

2.1获取cookies值

#获取当前页面的cookies值
print(chrome.get_cookie)

2.2获取当前页面返回代码

#拿到检查后的代码
print(chrome.page_source) 

2.3获取当前页面url

#获取当前页面的url
print(chrome.current_url)

二、查找元素

1.网页中套着另一个网页【豆瓣】

from selenium import webdriver

chrome = webdriver.Chrome()
chrome.maximize_window()
chrome.get('https://www.douban.com/')

#定位iframe【网页中含有网页】
iframe_u = chrome.find_element_by_tag_name('iframe')

#切换iframe子网页
chrome.switch_to.frame(iframe_u)

#定位元素(密码登录)
p_denglu = chrome.find_element_by_xpath('//li[text()="密码登录"]')
p_denglu.click()

2.通过标签的ID获取标签【重点】

密码 = 浏览器对象.find_element_by_id('password')
print(密码)
#<selenium.webdriver.remote.webelement.WebElement (session="20768af2ef9dd72840825ca1f7f98153", element="76e5f40d-69c2-406f-9c99-f8477754c692")>
#一个对象

3.通过标签id 获取多个标签列表,后面一样

密码2 = 浏览器对象.find_elements_by_id('password')
print(密码2)
#[<selenium.webdriver.remote.webelement.WebElement (session="b441d8428ab931d7d1f19acb4b9be777", element="faa5b363-3ae5-4b5c-88d6-341fc9df7f99")>]
#一个列表

4.通过标签的class属性值获取标签

密码3 = 浏览器对象.find_elements_by_class_name('account-form-field')
print(密码3)

5.通过xpath获取【重点】

用户名 = 浏览器对象.find_element_by_xpath('//input[@id="username"]')
print(用户名)

6.根据标签的文本获取元素列表,精确定位

登录 = 浏览器对象.find_element_by_link_text('登录豆瓣').click()
等同于:
登录 = 浏览器对象.find_element_by_xpath("//li[text()='登陆豆瓣']")
登录.click()

6.1.获取属性值

获取登陆豆瓣下的href 属性值

print(登录.get_attribute('href'))

7.根据标签包含的文本获取元素列表,模糊定位 [加s可以查多个但是列表需遍历才能使用]

登录2 = 浏览器对象.find_elements_by_partial_link_text('豆瓣')

8.根据标签名获取元素列表 【不常用】 切记用:elements

标签名 = 浏览器对象.find_elements_by_tag_name('div')

9.根据标签名获取元素列表

文字 = 浏览器对象.find_elements_by_tag_name('li')
print([文字.text for 文字 in 文字 ])
#['短信登录/注册','密码登录','','','','','','']

三、页面新建与切换

1.点击与切换

# 导包
from selenium import webdriver
# 获取[浏览器]的实例化对象
浏览器对象 = webdriver.Chrome()
# 最大化浏览器
浏览器对象.maximize_window()
# 使用浏览器打开网址
浏览器对象.get("https://www.douban.com/")
# 定位并点击电影[注意不要加s否则要遍历]
浏览器对象.find_element_by_xpath('//*[@id="anony-nav"]/div[1]/ul/li[2]/a').click()

# 获取当前所有的页面【列表】
页面 = 浏览器对象.window_handles
# 根据页面列表下标进行切换
浏览器对象.switch_to.window(页面[0])

2.新建与切换

from selenium import webdriver
import time
浏览器对象 = webdriver.Chrome()
浏览器对象.get("https://www.douban.com/")
time.sleep(2)
浏览器对象.execute_script("window.open('https://www.163.com/')")        # 打开新页面
time.sleep(2)
浏览器对象.execute_script("window.open('https://www.jd.com/')")         # 打开新页面
time.sleep(2)
浏览器对象.execute_script("window.open('https://changde.58.com/')")     # 打开新页面
# 获取当前所有的页面【列表】
页面 = 浏览器对象.window_handles
# 根据页面列表下标进行切换
浏览器对象.switch_to.window(页面[0])

四、页面的前进与后退

from selenium import webdriver
import time
浏览器对象 = webdriver.Chrome()
浏览器对象.get("https://www.douban.com/")
浏览器对象.find_element_by_xpath('//*[@id="anony-sns"]/div/div[3]/div/div[1]/ul/li[2]/div/a/img').click()
time.sleep(5)
浏览器对象.back() # 回退
time.sleep(5)
浏览器对象.forward() # 前进

五、获取cookies后,如何传递给responses

以登录古诗文网后,抓取收藏古诗为例

5.1 登录古诗文网【使用semenium模块模拟浏览器登录

from selenium import webdriver
import requests
from lxml import etree

chorme = webdriver.Chrome()
chorme.get('https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx')

#定位用户名并输入
email = chorme.find_element_by_id('email')
email.clear()    #清除用户名,以便重新输入
email.send_keys('yonghuming@123.com')     #输入用户名

#定位密码及输入
password = chorme.find_element_by_id('password')
password.clear()
password.send_keys('123456')

#定位并输入验证码
i = input('请输入验证码:')
code = chorme.find_element_by_id('code')
code.clear()
code.send_keys('i')

#定位登录按钮 并点击登录
denglu = chorme.find_element_by_id('denglu')
denglu.click()
erweima = chrome.find_element_by_id('close')
erweima.click()

5.2 获取当前页面的url 及 cookies 值

url = 浏览器对象.current_url
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}
cookies = 浏览器对象.get_cookies() 

5.3 处理cookies 数据【获得是一个列表,包含很多个字典】

cookies_dict = {}
for i in cookies:
	cookies_dict[i["name"]] = i["value"]

5.4 用requests访问网址,并解析

response = requests.get(url = url,headers=headers,cookies=cookies_dict)
html = etree.HTML(response.text)

5.5 提取名字及URL 并保存

name = html.xpath('//div[@class="sons"]//a//text()')
name =[''.join(name[i:i+2]) for i in range(0, len(name), 2)]
url = html.xpath('//div[@class="sons"]//a/@href')
url = ['https://so.gushiwen.cn/'+ url for url in url]
dt = dict(zip(name,url))
for name,url in dt.items():
    print(name,url)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值