qq-22432832

selenium+edge+python on mac

一、简介

本文主要介绍Selenium的最简单的使用,看懂了去拓展会So ez。
Selenium:一种浏览器脚本驱动工具,实现用电脑模拟人操作浏览器网页,对网页自动化操作。

二、环境准备

  1. 安装python,配置环境变量(python和python Scripts的)

  2. 安装或更新pip

  3. 使用pip工具安装第三方库:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

  4. 下载并部署你浏览器对应的驱动。

  5. 创建project,导入Python SDK

三、EASY准备

Edge浏览器采用Chromium内核,并将支持所有受支持的Windows版本以及macOS等平台。
这次我使用的是Edge

1、使用驱动获取指定页面元素

1)使用Service指定驱动路径
service = Service('/usr/local/bin/msedgedriver')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('https://www.baidu.com/')
2)给驱动导入用户配置option
#驱动路径
chromedriver = "/usr/local/bin/msedgedriver.exe"
#将驱动对应环境的映像对象 给到os
os.environ["webdriver.chrome.driver"] = chromedriver
#初始化配置
option = webdriver.ChromeOptions()
#配置加入我们的用户配置文件
option.add_argument('--user-data-dir=/usr/local/bin/config')
#将配置应用到驱动
driver = webdriver.Chrome(chromedriver,chrome_options=option)

2、获取完元素,定位元素

1)八种定位元素的方法(子)
  • 通过id定位元素:find_element_by_id(“id_vaule”)
  • 通过name定位元素:find_element_by_name(“name_vaule”)
  • 通过tag_name定位元素:find_element_by_tag_name(“tag_name_vaule”)
  • 通过class_name定位元素:find_element_by_class_name(“class_name”)
  • 通过css定位元素:find_element_by_css_selector()
  • 通过xpath定位元素:find_element_by_xpath(“xpath”)
  • 通过link:find_element_by_link_text(“text_vaule”)
  • 通过find_element_by_partial_link_text()
    def find_element_by_id(self, id_):
        return self.find_element(by=By.ID, value=id_)
        
    def find_element_by_xpath(self, xpath):
        return self.find_element(by=By.XPATH, value=xpath)
        
	def find_element_by_link_text(self, link_text):
        return self.find_element(by=By.LINK_TEXT, value=link_text)
        
	def find_element_by_partial_link_text(self, link_text):
        return self.find_element(by=By.PARTIAL_LINK_TEXT, value=link_text)
        
    def find_element_by_name(self, name):
        return self.find_element(by=By.NAME, value=name)
        
    def find_element_by_tag_name(self, name):
        return self.find_element(by=By.TAG_NAME, value=name)
        
    def find_element_by_class_name(self, name):
        return self.find_element(by=By.CLASS_NAME, value=name)
        
    def find_element_by_css_selector(self, css_selector):
        return self.find_element(by=By.CSS_SELECTOR, value=css_selector)

2)定位元素(父):find_elementfind_elements

其实可以一眼看出上面八种定位方法最终都调用的是find_element方法

driver.find_element(By.ID, "kw")
driver.find_elements(By.TAG_NAME, "input")

find_element:好处是方法名不会写死,定位方式可以通过参数传递,在一些框架中使用时会更加灵活一些。

定位方式By
nameBy.NAME
class_nameBy.CLASS_NAME
tag_nameBy.TAG_NAME
link_textBy.LINK_TEXT
partial_link_textBy.PARTIAL_LINK_TEXT
css_selectorBy.CSS_SELECTOR
xpathBy.XPATH

每种 find_element()方法,包括find_element_by_id()在查找元素时,如果定位语句不唯一,能够查到多个函数的话,默认值返回页面中出现的第一个。也就是说定位不唯一,那得到的元素可能就不是你想要的。区别就是带s的会返回指定元素列表,八种基本定位也会拓展出带s的八种,例:find_elements_by_id

以下是返回的元素对象结果:

/usr/local/bin/python3.9 /Users/zjk/IdeaProjects/test_Python/src/web_driver/driver.py
<selenium.webdriver.remote.webelement.WebElement (session="dc4f0bbd53be7da2abf796001cde4c77", element="155b0372-b50e-4faf-8354-025988caa340")>

Process finished with exit code 0

3、驱动对页面操作

driver.back() # 返回上一页(右箭头)
driver.forward() # 去下一页(左箭头)
driver.refresh() # 刷新当前网页
driver.close() # 关闭当前窗口

# .submit() 模拟键盘的回车建
driver.find_element_by_link_text('新闻').submit()

driver.execute(Command.QUIT)
driver.quit() # = .execute(Command.QUIT) + .stop_client()

...很多

四、CASE

1、遍历爬取页面内所有图片属性

from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service

service = Service('/usr/local/bin/msedgedriver')
service.start()
driver = webdriver.Remote(service.service_url)
driver.get('https://www.baidu.com')
for img in driver.find_elements_by_tag_name("img"):
    print('text: ' + img.text)
    print('size: ' + str(img.size))
    print('tag_name: ' + img.tag_name)
sleep(2)
driver.stop_client()
# driver.quit()

posted on 2021-09-28 10:40  春马与夏  阅读(108)  评论(0编辑  收藏  举报  来源

导航