python调用selenium获取页面元素操作详情
发表于:2024-07-02 11:56:21浏览:184次
引言
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()
栏目分类全部>