selenium操作的本质:模拟用户行为 获取之前requests所难以获取的内容 以及加密内容

(一)设置浏览器 网址 拿到网页源代码:

#selenium的作用是模拟用户行为 拿到加密内容
#访问页面
# from  selenium import webdriver
# brower=webdriver.Chrome()                       #这个步骤就是指定浏览器
# brower.get("https://uland.....com/")         #这个步骤是找到对应网站
# print(brower.page_source)      #直接爬取源代码  好像比之前更简单了...
#

逻辑是

1.调用webdriver行为

2.webdriver中设置所用浏览器

3.对浏览器brower使用get函数 其实这个就类似request拿到网址后进行初步的解析

4.解析完成后 可以直接brower,page_source拿到源代码 注意这和requests拿到的是相同结果

某种意义上更加简单

(二)定位元素,显示内容、属性、标签

关于定位元素:

(1)简单点就是用ID、Class_name后面的内容进行定位

a.获取属性
brower.get('https://www...com')
search=brower.find_element(By.ID,'J_Search')
print(search)  #这一步就是拿到所有的ele对象
print(search.get_attribute('class'))  #这个是针对ele对象进一步拿到中间的ele值 ctrl+F打开新的搜索窗放进class搜索

get网址之后

brower.find_ele方法定位元素,这个是By.ID的方法,拿到网页中的对应id

拿到之后,本质上还是ele对象 可以继续拿出其属性

(2)但是更通用的方法是:xpath(css和java_script目前还不太会用)

#xpath也可以选择
input3=brower.find_element(By.XPATH,'//input[@id="q"]')
print(input3.text)

这个就是拿到位置对应text文本

(三)浏览器模拟行为交互 (后面最常用的输入和点击)

键盘输入 鼠标点击
input=brower.find_element(By.ID,"q")  #现在希望往文本框里面打字
input.send_keys('iphone')
time.sleep(2)
input.clear()                 #这里做一个清除内容
input.send_keys('ipad')        #这里再次输入新内容
botton=brower.find_element(By.CLASS_NAME,'btn-search')  #这次用类名来看 执行鼠标点击
botton.click()  #click完成鼠标点击的操作

定位到对应的文本框节点后

send_keys()往里面填内容

time.sleep设置响应时间 以免被识别出来

再找到按键对应的节点

botton.click进行点击 完成鼠标点击动作

(四)关于这两种等待的方式

首先是含蓄等待

2.2页面等待
# (1)隐式等待 含蓄等待 整个打开到关闭浏览器的过程都等待
brower.implicitly_wait(10)
brower.get('https://www..com')
input=brower.find_element(By.CLASS_NAME,'logo')
print(input)
#这行代码的含义是 如果10秒内没有得到下面的代码 那么就报错退出
#等待是为了给服务器反应的时间,不等待可能拿不到

这个就是规定在某一段时间内(10s内拿到数据),不然就退出。目的是为了不会因为这个超时而让后面的代码都不能进行。

其实是显示等待(这个实际上用的更多)

# (2)显示等待 不是等待一个具体的时间 而是等待一个元素满足条件时执行
from selenium.webdriver.support import expected_conditions as EC #多一个条件 不等时间等条件
brower.get('https://www..com')
wait=WebDriverWait(brower,10)  #显示等待要设置一个最多等待时间
input=wait.until(EC.presence_of_element_located((By.ID,'q')))  #这里给显示条件了 直到找到id后 才有input
button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.btn-search')))  #直到点击按钮后 才返回botton
print(input,button)
#有比较特殊的点 在于这个EC.的方法后面是嵌套两个括号之后输入

本质就是规定程序执行先后顺序,避免同时执行有快有慢使得文件数据得不到

(1)显示等待要先引入这个EC方法

(2)设置一个最长等待时间 类似含蓄等待

(3)wait_until()括号里给条件 直到条件满足才继续向下 不然就等着

  (4)正常打印输出即可