Fork me on GitHub

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程序的位置不能移动,否则无法加载外部库。

posted @ 2024-01-24 22:43  张一默  阅读(37)  评论(0编辑  收藏  举报