0
点赞
收藏
分享

微信扫一扫

Selenium的使用

江南北 2022-09-14 阅读 50


基本使用

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
browser=webdriver.Chrome()
try:
browser.get("https://www.baidu.com")
input=browser.find_element_by_id("kw") #找到输入框
input.send_keys("Python") #输出Python
input.send_keys(Keys.ENTER) #输入回车键
wait=WebDriverWait(browser,10) #十秒内等待某个按钮被定为到,否则抛出异常
wait.until(EC.presence_of_element_located((By.ID,"content_left"))) #判断某个元素是否被加载到dom树立
print(browser.current_url) #输出当前的url
print(browser.get_cookies()) #输出cookies
print(browser.page_source) #输出网页源代码
finally:
browser.close() #关闭浏览器

百度页面输入文本框的源代码是:

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

用到CSDN的搜索也是同样的,主要部分稍微改一下


input=browser.find_element_by_id("keyword") #找到输入框

声明浏览器对象

from selenium import webdriver
brower=webdriver.Chrome()
brower=webdriver.Firefox()
brower=webdriver.Edge()
brower=webdriver.Safari()

调用brower对象,就可以执行各个动作以模拟浏览器操作。

访问页面

get()请求网页,参数传入URL

from selenium import webdriver
brower=webdriver.Chrome()
brower.get(
print(brower.page_source)
brower.close()

Chrome Headless模式

从Chrome59版本开始,支持Headless模式,也就是无界面模式,这样抓取的时候就不会弹出浏览器
基本语法:

chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
browser = webdriver.Chrome(chrome_options=chrome_options)

或者:

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--ignore-certificate-errors')

查找节点

查找单个节点
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
查找多个节点
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
通用方法find_element(),需要传入两个参数:查找方式By和值

from selenium import webdriver
from selenium.webdriver.common.by import By
browser=webdriver.Chrome()
browser.get("https://www.taobao.com")
input_first=browser.find_element(By.ID,"q")
print(input_first)
browser.close()

输出:

elenium.webdriver.remote.webelement.WebElement (session="78fcbfed404d8a74bddbe7aca21f7db7", element="0.7402649243501238-1")>

节点交互

输入文字send_keys()
清空文字clear()
点击按钮click()

from selenium import webdriver
browser=webdriver.Chrome()
browser.get("https://www.taobao.com")
input=browser.find_element_by_id("q")
input.send_keys("996.icu")
button=browser.find_element_by_css_selector("#J_TSearchForm > div.search-button > button")
button.click()

动作链

还有另外一些操作,它们没有特定的执行对象,比如鼠标拖拽、键盘按键等,这些动作用另一种方式来执行,就是动作链。

from selenium import webdriver
from selenium.webdriver import ActionChains
browser=webdriver.Chrome()
url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
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() #执行动作

执行JavaScript

from selenium import webdriver
browser=webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)") #将进度条拖到底部
browser.execute_script("alert('To Buttom')") #弹出alert提示框

获取节点信息

get_attribute获取节点的属性
text获取节点内部的文本信息
id获取id、location位置、tag_name获取标签名和size获取大小

from selenium import webdriver
browser=webdriver.Chrome()
url="https://www.zhihu.com/explore"
browser.get(url)
logo=browser.find_element_by_class_name("zu-top-link-logo")
print(logo)
print(logo.get_attribute("class")) #获取属性class的值
input=browser.find_element_by_class_name("zu-top-add-question")
print(input.text) #获取文本内容
print(input.id) #获取节点id
print(input.location) #获取id
print(input.tag_name) #获取标签名称
print(input.size) #获取节点大小,也就是宽高

切换Frame

Selenium打开页面后默认是在父级Frame里面操作,switch_to.frame()方法来切换Frame

import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser=webdriver.Chrome()
url="http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame("iframeResult")
try:
logo=browser.find_element_by_class_name("logo")
except:
print("No logo")
browser.switch_to.parent_frame()
logo=browser.find_element_by_class_name("logo")
print(logo)
print(logo.text)
browser.close()

延时等待

隐式等待

browser=webdriver.Chrome()
browser.implicitly_wait(10)

显式等待

import time
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
browser=webdriver.Chrome()
browser.get("https://www.taobao.com/")
wait=WebDriverWait(browser,10)
input=wait.until(EC.presence_of_element_located((By.ID,"q")))
#presence_of_element_located代表节点出现的意思,其参数是节点的定位元组
button=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn-search")))
#element_to_be_clickable也就是可点击
print(input,button)

Selenium的使用_css


Selenium的使用_选项卡_02

前进和后退

back()后退,forward()前进

import time
from selenium import webdriver
browser=webdriver.Chrome()
browser.get("https://www.baidu.com/")
browser.get("https://taobao.com/")
browser.back()
time.sleep(5)
browser.forward()
time.sleep(5)
browser.close()

Cookies

get_cookies()获取
delete_all_cookies()删除
add_cookies()添加

from selenium import webdriver
browser=webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
print(browser.get_cookies())
browser.add_cookie({"name":"name","domain":"www.zhihu.com","value":"germey"})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
browser.close()

选项卡管理

import time
from selenium import webdriver
browser=webdriver.Chrome()
browser.get("https://www.baidu.com/")
browser.execute_script("window.open()") #新开启一个选项卡
print(browser.window_handles) #获得当前开启的所有选项卡
browser.switch_to_window(browser.window_handles[1]) #切换到第二个选项卡
browser.get("https://www.taobao.com") #打开淘宝
time.sleep(1)
browser.switch_to_window(browser.window_handles[0]) #切换到第一个选项卡
browser.get("https://www.zhihu.com/") #打开知乎

异常处理

from selenium.common.exceptions import TimeoutException,NoSuchElementException

#基本用法如下
except TimeoutException:

except NoSuchElementException:


举报

相关推荐

0 条评论