Python:Selenium爬虫
常用语法
驱动常用方法
driver.maximize_window() # 最大化浏览器
driver.set_window_size(w,h) # 设置浏览器大小 单位像素
driver.set_window_position(x,y) # 设置浏览器位置
driver.back() # 后退操作
driver.forward() # 前进操作
driver.refresh() # 刷新操作
driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
driver.quit() # 关闭driver对象启动的全部页面
driver.get() #要打开的网址
driver.title # 获取当前页面title信息
driver.current_url # 获取当前页面url信息
driver.get_screenshot_as_file('截图.png')# 截图预览
driver.name # 浏览器名称
driver.page_source # 网页源码
driver.switch_to.window() # 切换窗口/标签页
元素常用方法
find_element(by=By.ID, value) # 根据元素的 ID 来查找元素。
find_element(by=By.NAME, value) # 根据元素的 name 属性来查找元素。
find_element(by=By.XPATH, value) # 根据元素的 XPath 来查找元素。
find_element(by=By.LINK_TEXT, value) # 根据元素的链接文本来查找元素。
find_element(by=By.PARTIAL_LINK_TEXT, value) # 根据元素的链接文本的一部分来查找元素。
find_element(by=By.TAG_NAME, value) # 根据元素的标签名来查找元素。
find_element(by=By.CLASS_NAME, value) # 根据元素的 class 属性来查找元素。
find_element(by=By.CSS_SELECTOR, value) # 根据元素的 CSS 选择器来查找元素
element.click() # 单击元素
element.send_keys("text") # 输入文本
element.clear() # 清除文本
element.submit() # 提交表单
element.is_displayed() # 元素是否可见
element.is_enabled() # 元素是否启用
element.is_selected() # 元素是否选中
element.get_attribute("attribute-name") # 获取元素属性 "outerHTML" "placeholder" "style"等
element.set_attribute("attribute-name", "value") # 设置元素属性
driver.execute_script("arguments[0].scrollIntoView();", element) # 滚动到元素属性
element.text # 获取元素文本
element.location # 获取元素位置
element.size # 获取元素大小
延时等待
隐式等待
from selenium import webdriver #导包
driver = webdriver.Chrome() #获取浏览器驱动对象
driver.implicitly_wait(20) #隐示等待,传入等待时间,加载完成后立即下一步,不再等待--建议
强制等待
from time import sleep
sleep(2) #传入等待时间:强制等待
显式等待
from selenium.webdriver.support.wait import WebDriverWait # 导包
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# WebDriverWait 需要传入的是驱动器对象,总体等待时间和刷新时间间隔时间间隔默认0.5
# Presence_of_element_located 表示元素是否存在 必须以元组的形式传入,所以使用到By方法进行定位
WebDriverWait(driver,30,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
浏览器选项
options = webdriver.ChromeOptions() # 创建配置对象
options.add_argument('lang=zh_CN.UTF-8') # 设置中文
options.add_argument('--headless') # 无头参数,浏览器隐藏在后台运行
options.add_argument('--disable-gpu') # 禁用GPU加速
options.add_argument('--start-maximized') # 浏览器最大化
options.add_argument('--window-size=1920x1024') # 设置浏览器分辨率(窗口大小)
options.add_argument('--user-agent=""') # 设置请求头的User-Agent
options.add_argument('--incognito') # 隐身模式(无痕模式)
options.add_argument(f'--proxy-server={proxy}') # 添加IP代理 proxy=f"http://{ip}:{port}"
driver.set_page_load_timeout(20) # 设置连接超时20秒
options.add_experimental_option('detach', True) # 不自动关闭浏览器
driver = webdriver.Chrome(options=options) # 创建浏览器对象
driver.get('https://www.baidu.com')
By方法
# selenium 4.17.1
# chormedriver 120.0.6099.109
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By # ID检索数据
from selenium.common.exceptions import NoSuchElementException # 导入异常种类用于try
# 启动无界面引导
opt = webdriver.ChromeOptions()
opt.add_argument("--headless")
# 实例化WebDriver对象
wd = webdriver.Chrome(options=opt,service=Service(r'D:\ChormDriver\chromedriver-win64\chromedriver.exe'))
# webdriver获取网址
wd.get('https://www.byhy.net/_files/stock1.html') # http请求
# 根据ID获取元素
stock_input = wd.find_element(By.ID, 'kw') # 返回对象的句柄
stock_input.send_keys('通讯') # 发送数据
stock_sear = wd.find_element(By.ID, 'go')
stock_sear.click()
wd.implicitly_wait(30) # 隐性等待30s,等待网页加载
# 根据class name获取元素
stockname_list = wd.find_elements(By.CLASS_NAME,'result-item') # 返回所有的对象列表
if len(stockname_list) == 0:
print("没有获取到任何对象,程序退出")
exit()
else:
for item in stockname_list: # 获取对象的文本内容
print(item.text)
# 退出
wd.close()
# 程序运行完会自动关闭浏览器,就是很多人说的闪退
# 这里加入等待用户输入,防止闪退
input('等待回车键结束程序')
CSS选择器
css选择器是更加全能的元素定位语法。
# selenium 4.17.1
# chormedriver 120.0.6099.109
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By # ID检索数据
from selenium.common.exceptions import NoSuchElementException
# 启动无界面引导
opt = webdriver.ChromeOptions()
# opt.add_argument("--headless")
opt.add_argument('--disable-gpu')
# 实例化WebDriver对象
wd = webdriver.Chrome(options=opt,service=Service(r'D:\ChormDriver\chromedriver-win64\chromedriver.exe'))
# webdriver获取网址
wd.get('https://www.byhy.net/_files/stock1.html') # http请求
# CSS获取元素
stock_input = wd.find_element(By.CSS_SELECTOR, 'input') # 根据元素名称选择,返回第一个元素
print(stock_input.get_attribute("outerHTML")) # 获取对象所有文本
stock_input.send_keys('通讯') # 发送数据
stock_sear = wd.find_element(By.CSS_SELECTOR, '#go') # 根据ID选择
stock_sear.click()
wd.implicitly_wait(30) # 隐性等待30s,等待网页加载
# CSS获取元素
stockname_list = wd.find_elements(By.CSS_SELECTOR,'.result-item') # 返根据class name选择
if len(stockname_list) == 0:
print("没有获取到任何对象,程序退出")
exit()
else:
for item in stockname_list: # 获取对象的文本内容
print(item.text)
# 退出
wd.close()
# 程序运行完会自动关闭浏览器,就是很多人说的闪退
# 这里加入等待用户输入,防止闪退
input('等待回车键结束程序')
程序打包
pip install pyinstaller //安装插件
pyinstaller 定位元素.py //开始打包
注意exe程序的位置不能移动,否则无法加载外部库。
本文来自博客园,作者:{张一默},转载请注明原文链接:https://www.cnblogs.com/YiMo9929/p/17986033