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)