您的当前位置:首页>全部文章>文章详情

python调用selenium获取页面元素操作详情

发表于:2024-07-02 11:56:21浏览:184次TAG: #python #selenium

引言

demo示例说明

示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.getcwd())))
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from binascii import unhexlify
import re
class Spider(object):
    def __init__(self):
        pass

    def demo(self):
        # selenium 4.11.2 以上可以不用指定 chromedriver.exe ,但是不建议,因为这样打开网站会特别的慢
        # selenium 4.0 以上executable_path 被重构到了 Service 函数里
        chrome_options = Options()
        # 不自动关闭浏览器
        chrome_options.add_experimental_option('detach', True)
        # 确保无界面模式
        chrome_options.add_argument("--headless")  
        chrome_options.add_argument("--disable‐gpu")
        chrome_options.add_argument("--start-maximized")  # 最大化窗口

        path = os.path.join(os.getcwd(),"extend","chromedriver-win64","chromedriver.exe")
        chrome_service = Service(executable_path=os.path.abspath(path))
        browser = webdriver.Chrome(service=chrome_service,options=chrome_options)
        # 最大化
        browser.maximize_window()

        try:
            # 访问网站
            browser.get("http://www.baidu.com")
            # 等待特定元素加载完成
            element = WebDriverWait(browser, 60).until(
                EC.presence_of_element_located((By.ID,"tarID"))
            )
            # 截屏
            browser.save_screenshot("index.png")
            ######## 页面源码 ########
            # source_code = browser.page_source
            # source_code = browser.print_page
            # print(browser.print_page)
            ######## 元素定位 ########
            # 输入框html:<input id="kw" name="wd" class="s_ipt" value="这里是输入搜索的关键词" maxlength="255" autocomplete="off">
            # 按  钮html:<input type="submit" id="su" value="百度一下" class="bg s_btn">
            # 根据元素 id 属性
            # wd = browser.find_element(By.ID, 'kw')
            # btn = browser.find_element(By.ID,'su')
            # 根据元素 name 属性
            # wd = browser.find_element(By.NAME, 'wd')
            # 根据元素 Xpath 属性
            # wd = browser.find_element(By.XPATH, '//input[@id="kw"]')
            # 根据元素 标签名
            # wd_list = browser.find_elements(By.TAG_NAME, 'input')
            # 根据元素 bs4语法
            # wd_list = browser.find_elements(By.CSS_SELECTOR, '#kw')
            # 根据元素 class
            # wd = browser.find_element(By.CLASS_NAME, 's_ipt')
            # 根据元素 标签文本(精确定位)
            # wd = browser.find_elements(By.LINK_TEXT, '这里是输入搜索的关键词')
            # 根据元素 标签文本(模糊定位)
            # wd = browser.find_elements(By.PARTIAL_LINK_TEXT, '搜索的关键词')
            # 获取div底下的a链接
            # mydiv = browser.find_element(By.CLASS_NAME, 'mydiv')
            # mya = mydiv.find_element(By.TAG_NAME,'a')
            # myas = mydiv.find_elements(By.TAG_NAME,'a')

            ######## 元素信息 ########
            # 元素属性-获取class名称
            # wd_class = wd.get_attribute('class') # 输出:s_ipt
            # 元素标签名
            # wd_tag = wd.tag_name # 输出:input
            # 元素文本
            # wd_text = wd.text # 输出:空字符串
            # 元素大小
            # wd_size = wd.size # 输出:{'height': 43, 'width': 549}
            ######## 页面交互 ########
            # 输入文本
            # wd.send_keys("大字节")
            # sleep(1)
            # 点击
            # btn.click()
            # sleep(1)
            # 清除文本
            # wd.clear()
            # sleep(1)
            # 回车
            # wd.submit()
            # sleep(3)
            # 运行 JavaScript
            # browser.execute_script("document.documentElement.scrollTop=100000")
            # browser.execute_script("alert('页面交互-运行 JavaScript-测试弹出')")
            # sleep(2)
            # 前进/后退
            # div = browser.find_element(By.ID,'2') # 点击查询结果第二条
            # a = div.find_element(By.TAG_NAME,'a')
            # a.click()
            # sleep(3)
            # browser.back() # 后退
            # sleep(2)
            # browser.forward() # 前进
            # sleep(1)
            # browser.save_screenshot("index2.png")

        except Exception as e:
            # 异常
            print(f"发生异常:{e}")
            pass
        finally:
            # 有/无异常都会执行
            browser.quit()


if __name__ == '__main__':
    s = Spider()
    s.demo()