selenium+edge+python on mac
一、简介
本文主要介绍Selenium的最简单的使用,看懂了去拓展会So ez。
Selenium:一种浏览器脚本驱动工具,实现用电脑模拟人操作浏览器网页,对网页自动化操作。
二、环境准备
-
安装python,配置环境变量(python和python Scripts的)
-
使用pip工具安装第三方库:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
-
创建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_element
和 find_elements
其实可以一眼看出上面八种定位方法最终都调用的是find_element
方法
driver.find_element(By.ID, "kw")
driver.find_elements(By.TAG_NAME, "input")
find_element:好处是方法名不会写死,定位方式可以通过参数传递,在一些框架中使用时会更加灵活一些。
定位方式 | By |
---|---|
name | By.NAME |
class_name | By.CLASS_NAME |
tag_name | By.TAG_NAME |
link_text | By.LINK_TEXT |
partial_link_text | By.PARTIAL_LINK_TEXT |
css_selector | By.CSS_SELECTOR |
xpath | By.XPATH |
每种 find_element()方法,包括find_element_by_id()在查找元素时,如果定位语句不唯一,能够查到多个函数的话,默认值返回页面中出现的第一个。也就是说定位不唯一,那得到的元素可能就不是你想要的。区别就是带s的会返回指定元素列表,八种基本定位也会拓展出带s的八种,例:find_element
s
_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()