爬虫之selenium
程序员文章站
2022-04-30 20:14:37
...
selenium
- 配置
- ChromeDriver
- Firefox
- 查看浏览器对应版本,在以上连接中下载对应相似度最高的版本的驱动,然后将其放在python目录下的Scripts目录下即可。
- 安装selenium
pip install selenium -i https://pypi.douban.com/simple
- 简单使用
- 实例化
from selenium import webdriver # 实例化 # 谷歌 driver_1 = webdriver.Chrome() # 火狐 driver_2 = webdriver.Firefox()
-
driver.get('https://www.baidu.com')
: 通过get方法发送请求 -
driver.quit()
: 退出浏览器 -
find_element_by_id
:根据id来查找某个元素 -
find_element_by_class_name
:根据类名查找元素 -
find_element_by_name
:根据name属性的值来查找元素 -
find_element_by_tag_name
:根据标签名来查找元素 -
find_element_by_xpath
:根据xpath语法来获取元素 - find_element 找到的是满足条件的第一个元素
- find_elements 找到的是满足条件的所有元素
-
cookies = driver.get_cookies()
: 获取cookie
- 操作表单元素
- 操作输入框
- 定位到这个元素
- 使⽤send_keys(value),将数据填充进去
- 按钮(点击操作)
- 定位到这个元素
- 执行click()方法
- 操作checkbox
- 选中这个标签(find_element)
- 执⾏click事件(click())
- 操作输入框
- 行为链
- 将⿏标移动到某个元素上并执⾏点击事件
actions = ActionChains(driver) actions.move_to_element(inputTag) actions.send_keys_to_element(inputTag, '123') actions.move_to_element(submitTag) actions.click(submitTag) actions.perform()
- 关于隐式等待与显示等待
- 隐式等待
- driver.implicitly_wait(10)
- 可以理解为在设定的10中,页面不停的刷新页面直到元素被找到或者时间耗尽抛出异常
- driver.implicitly_wait(10)
- 显示等待
- 显示等待是表明某个条件成⽴后才执⾏获取元素的操作。也可以 在等待的时候指定⼀个最⼤的时间,如果超过这个时间那么就抛出⼀个异 常。显示等待应该使⽤selenium.webdriver.support.excepted_conditions 期望的条件和selenium.webdriver.support.ui.WebDriverWait来配合完成
- 隐式等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
element = WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.ID, "myDynamicElement"))
)
element = WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.ID, "myDynamicElement"))
)
- iframe
-
当遇到iframe时,无法进行正常操作 ,这里要使用driver.switch_to_frame()方法或者driver.switch_to.frame(),推荐使用后者。
-
用id定位:
driver.switch_to_frame(“myframe”) -
用name定位:driver.switch_to_frame(“myframe”)
-
用网页标签对象来定位:driver.switch_to_frame( driver.find_element_by_tag_name( “iframe” ))
-
- 友情提示:没啥大事不要更新浏览器、不要更新浏览器、不要更新浏览器, 因为更新了你还得重新装驱动,虽然很快,但是很恼火
关于取消浏览器自动更新
win+r 输入msconfig
然后重启电脑即可