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 _ inrange(10):for _ inrange(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()
版权归原作者 溜溜球历险记 所有, 如有侵权,请联系我们删除。