Selenium On Mac

20 次阅读 预计阅读时间: 5 分钟


n

一、简介

nnnn

Selenium:一种浏览器脚本驱动工具,实现用电脑模拟人操作浏览器网页,对网页自动化操作。

nnnn

本文主要介绍Selenium的最简单的使用,看懂了去拓展会So ez。

nnnn

二、环境准备

nnnn
    n
  1. 安装python,配置环境变量(python和python Scripts的)
  2. nnnn
  3. 安装或更新pip
  4. nnnn
  5. 使用pip工具安装第三方库:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
  6. nnnn
  7. 下载并部署你浏览器对应的驱动。
  8. nnnn
  9. 创建project,导入Python SDK
  10. n
nnnn

三、代码

nnnn

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

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

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

nnnn

八种定位元素的方法(子)

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

定位元素(父):find_elementfind_elements

nnnn

上面八种定位方法最终都调用的是find_element方法

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

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

nnnn
定位方式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
nnnn

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

nnnn

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

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

3、驱动对页面操作

nnnn
driver.back() # 返回上一页(右箭头)ndriver.forward() # 去下一页(左箭头)ndriver.refresh() # 刷新当前网页ndriver.close() # 关闭当前窗口n# .submit() 模拟键盘的回车建ndriver.find_element_by_link_text('新闻').submit()ndriver.execute(Command.QUIT)ndriver.quit() # = .execute(Command.QUIT) + .stop_client()n...很多
nnnn

四、CASE

nnnn

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

nnnn
from selenium import webdrivernfrom time import sleepnfrom selenium.webdriver.chrome.service import Servicenservice = Service('/usr/local/bin/msedgedriver')nservice.start()ndriver = webdriver.Remote(service.service_url)ndriver.get('https://www.baidu.com')nfor img in driver.find_elements_by_tag_name("img"):n    print('text: ' + img.text)n    print('size: ' + str(img.size))n    print('tag_name: ' + img.tag_name)nsleep(2)ndriver.stop_client()n# driver.quit()
n
最后更新于 2023-03-22