Selenium 学习(一)

Selenium 学习(一)

Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些 JavaScript动态渲染的页面来说,此种抓取方式非常有效。
简单示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.wait import WebDriverWait
import time


#声明浏览器对象,需要配置对应浏览器的驱动器(Driver),比如谷歌的驱动器为ChromeDriver
browser = webdriver.Chrome()

try:
    #访问百度页面
    browser.get("https://www.baidu.com")
    # 查找id为"kw"的节点(百度搜索输入框)
    input = browser.find_element_by_id("kw")
    #向输入框输入文本       
    input.send_keys('python')
    #输入框内按回车键
    input.send_keys(Keys.ENTER)
    #显式等待
    wait = WebDriverWait(browser,10)
    wait.until(EC.presence_of_element_located((By.ID,'content_left')))
    #打印相关信息
    print(browser.current_url)
    print(browser.get_cookies())
    print(browser.page_source)
finally:
    browser.close()

查找节点

selenium中可以使用属性,Xpath,CSS选择器等获取方式

find_element() 获取单个节点

它需要传入两个参数:查找方式By和值
下列这些函数都由这个函数衍生而来:
find_element_by_id()
find_element_by_name()
find_element_by_xpath()
find_element_by_link_text()
find_element_by_class_name()
find_element_by_css_selector()

示例

browser.get("https://taobao.com")
#通过四种方式获取输入框
input_1 = browser.find_element_by_id('q') #属性选择
input_2 = browser.find_element_by_css_selector('#q') #CSS选择
input_3 = browser.find_element_by_xpath("//*[@id='q']") #Xpath 选择
input_4 = browser.find_element(By.ID,'q') # 通用函数选择

print(input_1,input_2,input_3,input_4)
browser.close()

find_elements() 获取多个节点

ps:比获取单个节点的方法多了一个s,其他的都差不多,注意区分
返回值为列表(list)

browser.get("https://taobao.com")
lis = browser.find_elements_by_css_selector('.service-bd li')
print(type(lis),lis)
browser.close()

节点交互

常见用法有:输入文本时用send_keys()方法,清空文本时用clear()方法,点击按钮时用click()方法

#访问淘宝
browser.get("https://taobao.com")
#选择淘宝搜索框
input = browser.find_element_by_id('q')
#搜索框输入文本“python”
input.send_keys("python")
#选择搜索按钮
button = browser.find_element_by_class_name('btn-search')
#点击按钮
button.click()
#程序停止10s,目的是让浏览器停止,看看效果
time.sleep(10)

动作链

动作链为没有特定对象的操作,比如鼠标拖拽,键盘按键

#鼠标拖拽示例
from selenium.webdriver import ActionChains
browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
#切换到子页面
browser.switch_to_frame('iframeResult')
#定义需要拖拽的节点
source = browser.find_element_by_css_selector('#draggable')
#定义拖拽到的目标节点
target = browser.find_element_by_css_selector('#droppable')
#声明动作链对象
action = ActionChains(browser)
#调用鼠标拖拽方法
action.drag_and_drop(source,target)
#执行动作
action.perform()
time.sleep(10)

执行JavaScript

对于某些Selenium API没有提供的操作,比如下拉进度条,可以直接模拟运行Javascript,使用方法execute_script()即可实现

browser.get("https://zhihu.com/explore")
#执行JavaScript将进度条拉到最底部
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
#弹窗显示
browser.execute_script('alert("到底了")')
time.sleep(10)

获取节点信息

selenium 已经提供了选择节点的方法,那么它也有相关的方法和属性提取节点信息,前提是先选中这个节点

browser.get("https://zhihu.com/explore")
input = browser.find_element_by_class_name('zu-top-add-question')
#使用get_attribute() 方法获取属性,传入想要获取的属性名即可得到它的值
print(input.get_attribute('id'))
#获取文本值
print(input.text)
#获取id属性
print(input.id)
#获取locati属性(可以获取该节点在页面中的先对位置
print(input.location)
#获取标签名称
print(input.tag_name)
#获取节点的大小,也就是宽高
print(input.size)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值