Selenuim

  1. 获取ajax数据的方式
  • 直接分析ajax调用的接口,然后通过代码请求这个接口
  • 使用Selenlum+chromedriver模拟浏览器行为获取数据
  1. Selenium[səˈliːniəm]相当于是一个机器人,可以模拟人类上的一些行为,自动处理浏览器上的一些行为,比如点击,填充数据,删除cookie等。chromedriver是一个驱动chrome浏览器的驱动程序,使用他可以驱动浏览器。
  2. 安装Selenium和chromedriver
  • 安装Selenium:pip install selenium
  • mac上如何安装chromedriver
    查看你电脑上浏览器的版本:
    在这里插入图片描述
    下载相应版本的Chromedriver的zip文件,地址:Chromedriver
    解压后放到mac的/usr/local/bin目录下
    然后打开pycharm,输入下面代码:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(4)
driver.quit()

如果能打开浏览器,则说明驱动安装成功。


  1. 关闭页面
  • driver.close() 关闭当前页面
  • driver.quit()关闭整个流量器
  1. 定位元素
  • 定位单个元素
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 通过id方式获取
# inputTag = driver.find_element_by_id('kw')
# inputTag.send_keys("python")
# 通过name属性获取
# driver.find_element_by_name()
# 通过类名获取
# driver.find_element_by_class_name()
# 通过标签名字获取
# driver.find_element_by_tag_name()
# 通过xpath语法获取
# inputTag =driver.find_element_by_xpath('//input[@id="kw"]')
# inputTag.send_keys('css')
# 通过css选择器获取
inputTag =driver.find_element_by_css_selector('#kw')
inputTag.send_keys('css')
time.sleep(4)
driver.quit()
  • 定位多个元素
    将上述各种方法的element改成elements,返回的是一个列表。
  1. 操纵表单元素
  • 操纵输入框
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
inTag = driver.find_element_by_css_selector('#kw')
# send_keys()指定向输入框中输入的关键字
inTag.send_keys('python')
time.sleep(3)
# clear()清楚输入框中的内容
inTag.clear()
  • 操纵checkbox
from selenium import webdriver
import time


driver = webdriver.Chrome()
driver.get('https://www.douban.com/')
frame1 = driver.find_element_by_xpath('//iframe')
driver.switch_to.frame(frame1)
checkbox = driver.find_element_by_css_selector("#account-form-remember")
#调用点击事件
checkbox.click()
  • 操纵下拉菜单
from selenium import webdriver
from selenium.webdriver.support.ui import Select


driver = webdriver.Chrome()
driver.get('https://account.chsi.com.cn/account/preregister.action?from=chsi-home')
selectTag = Select(driver.find_element_by_css_selector('#pwdreq1'))
# 根据选项的索引进行选择
selectTag.select_by_index(1)
# 根据选项的value值进行选择,学信网value和index存的值一样
selectTag.select_by_value('1')
# 根据选项的实际文本进行选择
selectTag.select_by_visible_text('您配偶的生日是?')
# 取消选中所有选项
selectTag.deselect_all()
  • 操纵按钮:点击事件
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
inputTag = driver.find_element_by_css_selector('#kw')
btn = driver.find_element_by_css_selector('#su')
inputTag.send_keys('python')
btn.click()
#当调用点击方法报错时,可以采用下面方式调用self.driver.execute_script("arguments[0].click();", btn)
  1. 行为链
  • 有时候在页面的操作可能又很多步,那么这个时候可以使用鼠标的行为链ActionChains来完成。比如要将鼠标移动到某个元素并执行点击事件:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
inputTag = driver.find_element_by_css_selector('#kw')
btn = driver.find_element_by_css_selector('#su')

chains = ActionChains(driver)
chains.move_to_element(inputTag)
chains.send_keys_to_element(inputTag,'selenium')
chains.move_to_element(btn)
chains.click(btn)
chains.perform()
  • 还有更多关于鼠标的操作:
    click_and_hold(element):点击但不松开鼠标
    context_click(element):点击右键
    double_click(element):双击
  1. 操作Cookie
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

# get_cookies获取所有cookie
for cookie in driver.get_cookies():
    print(cookie)
# get_cookie()根据某个字典的值获取cookie
print(driver.get_cookie("PSTM"))
# 删除某个cookie
driver.delete_cookie("PSTM")
# 删除所有cookie
driver.delete_all_cookies()
driver.quit()
  1. 隐式等待和显式等待
  • 现在大多数网页都是使用ajax获取数据的,为了防止页面数据没有加载完成就对数据进行获取,可以先等待一段时间,等页面数据加载完成后再获取元素。
  • 隐式等待:先等待固定的时间后再获取元素
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

driver.implicitly_wait(10)
inputTag = driver.find_element_by_css_selector("dad")
  • 显式等待:获取到元素后就不在等待
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'dsas'))
)
  1. 打开多页面与切换窗口
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 打开另一个窗口
driver.execute_script('window.open("https://douban.com")')
# 切换窗口,window_handles是一个列表索引根据打开的窗口的顺序创建
driver.switch_to.window(driver.window_handles[1])
#driver.close()关闭当前窗口
# 打印当前窗口的url
print(driver.current_url)
# 打印当前窗口源代码
print(driver.page_source)
  1. 设置代理ip
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=123.169.37.242:9999")
driver = webdriver.Chrome(options=options)
driver.get('http://httpbin.org/ip')
  1. webEelement
  • 使用dirver查找的元素返回好似webEelement类型
  • 一些方法:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
inputTag = driver.find_element_by_css_selector('#su')
#获取属性值
print(inputTag.get_attribute('value'))
#截屏
# inputTag.screenshot('baidu.png')
driver.quit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值