selenium的使用
0.使用selenium
import time
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
1.创建一个浏览器对象(双击打开谷歌浏览器)
b = Chrome()
2.输入需要控制的网站的地址
b.get('https://www.baidu.com')
3.获取标签
1)浏览器对象.find_element(查找方式, 值) - 按照指定方式获取第一个满足条件的标签,返回一个标签对象
2)浏览器对象.find_elements(查找方式, 值) -按照指定方式获取所有满足条件的标签,返回一个列表,列表中的元素是标签
查找方式:
1)By.ID - 通过id属性值获取标签
2)By.CLASS_NAME - 通过class属性值获取标签
3)By.CSS_SELECTOR - 通过css选择器获取标签
search_box = b.find_element(By.ID, 'kw')
search_btn = b.find_elements(By.CSS_SELECTOR, '#su')
chenge_btn = b.find_element(By.ID, 'hotsearch-refresh-btn')
4.操作标签
# 1)输入框输入内容:输入框标签对象.send_keys(内容)
# search_box.send_keys('简笔画\n')
# 2)点击标签:标签对象.click()
time.sleep(1)
chenge_btn.click()
练习:打开京东-搜索巧克力
b = Chrome()
b.get('https://www.jd.com')
search_box = b.find_element(By.ID, 'key')
search_box.send_keys('巧克力\n')
5.页面滚动
js滚动页面的代码:window.scrollBy(x方向偏移量, y方向偏移量)
time.sleep(1)
for _ in range(10):
for _ in range(10):
b.execute_script('window.scrollBy(0, 500)')
time.sleep(1)
next_btn = b.find_element(By.CLASS_NAME, 'pn-next')
next_btn.click()
# 点击下一页
next_btn = b.find_element(By.CLASS_NAME, 'pn-next')
next_btn.click()
print('滚动结束')
input()
1.打开和关闭浏览器
from selenium.webdriver import Chrome, Firefox, Safari, Ie
import time
1.创建浏览器对象(自动打开一个空的页面)
b = Chrome()
time.sleep(2)
2.打开指定页面
# 1)可以打开网页
b.get('https://www.baidu.com')
# 对浏览器内容截图
b.get_screenshot_as_file('files/baidu.png')
time.sleep(2)
# 2)打开本地的html文件
url = 'file:///D:/%E5%8D%83%E9%94%8B%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-2022%E5%B9%B4/02%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/day4-%E4%BA%AC%E4%B8%9C%E7%99%BB%E5%BD%95%E9%A1%B5%E9%9D%A2/01%E4%BA%AC%E4%B8%9C%E7%99%BB%E5%BD%95%E9%A1%B5%E9%9D%A2.html'
b.get(url)
# 对浏览器内容截图
b.get_screenshot_as_file('files/jd.png')
time.sleep(2)
3.关闭当前页面
b.close()
2.控制浏览器大小
from selenium.webdriver import Chrome
import time
b = Chrome()
1.设置浏览器全屏显示
b.maximize_window()
b.get('https://www.baidu.com')
time.sleep(2)
2.设置窗口大小:500×500
b.set_window_size(500, 500)
time.sleep(2)
# 同时设置窗口的位置和大小
# set_window_rect(x, y, width, height)
b.set_window_rect(500, 300, 600, 300)
time.sleep(2)
b.close()
input()
3.刷新前进后退
from selenium.webdriver import Chrome
import time
b = Chrome()
# 第一次:打开百度页面
b.get('https://www.baidu.com')
time.sleep(2)
# 1.刷新页面
b.refresh()
time.sleep(2)
# 第二次:淘宝页面
b.get('https://www.taobao.com')
time.sleep(2)
# 第三次:京东页面
b.get('https://www.jd.com')
time.sleep(2)
# 2.后退
# 第一次后退到淘宝
b.back()
time.sleep(2)
# 第两次后退到百度
b.back()
time.sleep(2)
# 3.前进
# 前进到淘宝
b.forward()
time.sleep(2)
b.close()
input()
4.获取页面基本属性
from selenium.webdriver import Chrome
import time
b = Chrome()
b.get('https://movie.douban.com/top250')
time.sleep(2)
1.获取网页标标题
print(b.title)
2.获取当前网页地址
print(b.current_url)
3.获取浏览器名称
print(b.name)
4.获取当前页面的网页源代码(爬虫的时候使用)
print(b.page_source)
b.close()
5.定位标签
1.定位标签(获取标签)
浏览器对象.find_element(定位方式, 值) - 获取某一个标签,返回一个标签对象
浏览器对象.find_elements(定位方式, 值) - 获取多个标签,返回一个列表,列表中的元素是标签
1)定位方式
By.ID - 根据标签的id属性的值获取标签
By.NAME - 根据标签的name属性的值获取标签
By.CLASS_NAME - 根据标签的class属性的值获取标签
By.TAG_NAME - 根据标签名获取标签
By.LINK_TEXT - 获取标签内容为指定值的a标签
By.PARTIAL_LINK_TEXT - 获取标签内容包含指定值的a标签
By.CSS_SELECTOR - 获取指定class选择器选中的标签
# a.获取第一个id属性值为'inp-query'的标签
result = b.find_element(By.ID, 'inp-query')
print(result)
# test:
result = b.find_element(By.ID, 'suggResult')
print(result)
# b.获取第一个name属性值为'search_text'的标签
result = b.find_element(By.NAME, 'search_text')
print(result)
# c.获取所有class属性值为'playable'的标签
result = b.find_elements(By.CLASS_NAME, 'playable')
print(result)
# 遍历拿到每一个class属性值为'playable'的标签,并且获取标签内容
for x in result:
print(x.text)
# d.获取所有的p标签
result = b.find_elements(By.TAG_NAME, 'p')
for x in result:
print(x.text)
# e.获取标签为'选电影'的内容
result = b.find_element(By.LINK_TEXT, '选电影')
print(result)
result.click()
# 练习:
result = b.find_element(By.LINK_TEXT, '排行榜')
print(result)
# f.获取标签内容中包含'影'的a标签
result = b.find_elements(By.PARTIAL_LINK_TEXT, '影')
for x in result:
print(x.text)
result = b.find_elements(By.CSS_SELECTOR, 'ol.grid_view>li>div>.info>.hd>a>span:nth-child(1)')
for x in result:
print(x.text)
input()
6.获取标签信息
from selenium.webdriver import Chrome
import time
from selenium.webdriver.common.by import By
b = Chrome()
b.get('https://www.baidu.com')
time.sleep(2)
# 获取标签
news = b.find_element(By.LINK_TEXT, '新闻')
# 1.获取标签内容
print(news.text)
# 2.获取标签指定属性的值
# 获取标签href的属性值
print(news.get_attribute('href'))
print(news.get_attribute('id'))
# 3.获取id(id不是id属性值,而是标签在网页中的编号)
print(news.id)
# 4.获取标签的位置(相对父标签)
print(news.location)
# 5.获取标签的大小
print(news.size)
# 6.获取标签名
print(news.tag_name)
7.键盘相关的交互操作
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
b = Chrome()
b.get('https://www.baidu.com')
time.sleep(2)
search_box = b.find_element(By.ID, 'kw')
# 1.输入框输入内容
search_box.send_keys('新冠')
time.sleep(2)
# 2.清空输入框
search_box.clear()
time.sleep(2)
# 3.回车确认
search_box.submit()
time.sleep(2)
search_box = b.find_element(By.ID, 'kw')
search_box.send_keys('疫情最新消息')
time.sleep(2)
# 4.模拟删除键
search_box.send_keys(Keys.BACK_SPACE)
time.sleep(2)
# ctrl+a -> ctrl+c ->清空 ->ctrl+v
# 5.模拟全选(ctrl+A)
search_box.send_keys(Keys.CONTROL, 'a')
time.sleep(2)
search_box.send_keys(Keys.CONTROL, 'c')
time.sleep(2)
search_box.send_keys(Keys.BACK_SPACE)
time.sleep(2)
search_box.send_keys(Keys.CONTROL, 'v')
time.sleep(2)
input()
8.鼠标相关的交互操作
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time
b = Chrome()
b.get('https://www.baidu.com')
time.sleep(2)
1.左键:click()
logo = b.find_element(By.ID, 'lg')
logo.click()
time.sleep(2)
# 注意:除了按左键,其他的鼠标交互动作属于复杂的动作,需要动作链来完成
from selenium.webdriver.common.action_chains import ActionChains
2.右键:context_click()
ActionChains(b).context_click(logo).perform()
time.sleep(2)
3.双击:double_click()
div = b.find_element(By.CLASS_NAME, 'accessibility-icon')
ActionChains(b).double_click(div).perform()
time.sleep(3)
4.悬停
span = b.find_element(By.ID, 's-usersetting-top')
ActionChains(b).move_to_element(span).perform()
time.sleep(5)
5.拖拽
b.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
time.sleep(2)
# 注意:如果在网页源代码中有iframe标签,并且需要操作的内容在这个iframe里面,那么操作之前需要切换窗口
new_window = b.find_element(By.ID,'iframeResult')
b.switch_to.frame(new_window)
goal_div = b.find_element(By.ID, 'droppable')
drag_div = b.find_element(By.ID, 'draggable')
ActionChains(b).drag_and_drop(drag_div, goal_div).perform()
time.sleep(3)
input()
9.选项卡切换
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time
b = Chrome()
# 打开百度(b指向百度页面)
b.get('https://ww.baidu.com')
time.sleep(1)
# 点击新闻对应的a标签,在新的选项卡中打开新的页面(b还是指向百度首页)
news = b.find_element(By.LINK_TEXT, '新闻')
news.click()
# 1.选项卡切换
# 1)获取当前浏览器所有选项卡
all_handle = b.window_handles
print(all_handle)
# 2)切换选项卡
# 切换到新闻页面
b.switch_to.window(all_handle[1])
time.sleep(2)
# 获取新闻页面中的新闻图标
logo = b.find_element(By.CSS_SELECTOR, 'div.logo')
# print(logo)
logo.click()
time.sleep(1)
# 关闭新闻页面
b.close()
# 回到首页
b.switch_to.window(all_handle[0])
time.sleep(1)
search = b.find_element(By.ID, 'kw')
search.send_keys('你好\n')
10.拖拽的操作
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
b = Chrome()
b.get('http://www.jm8008.com/SignIn.jsp')
time.sleep(2)
btn = b.find_element(By.CLASS_NAME, 'geetest_radar_tip_content')
btn.click()
time.sleep(5)
# 获取需要拖拽的目标标签
source = b.find_element(By.CLASS_NAME,'geetest_slider_button')
action = ActionChains(b)
# 将指定的标签在x轴方向拖拽150像素
action.drag_and_drop_by_offset(source, 180, 0)
action.perform()
input()
11.中国知网数据分析关键字提取
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time
b = Chrome()
b.get('https://www.cnki.net/')
time.sleep(1)
# 搜索数据分析
search = b.find_element(By.ID,'txt_SearchText')
search.send_keys('数据分析\n')
time.sleep(1)
# 所有搜索结果对应论文名称标签
all_name = b.find_elements(By.CSS_SELECTOR, 'td.name>a')
print(all_name)
# 按顺序一个一个点击论文名字
for x in all_name:
x.click()
time.sleep(1)
# 切换到详情页对应的选项卡
all_handles = b.window_handles
b.switch_to.window(all_handles[-1])
time.sleep(1)
# 获取关键词
try:
p = b.find_element(By.CLASS_NAME, 'keywords')
print(p.text)
except:
print('没有关键词!')
# 关闭当前详情页
b.close()
# 切换到首页
b.switch_to.window(all_handles[0])
input()