一、简介
nnnnSelenium:一种浏览器脚本驱动工具,实现用电脑模拟人操作浏览器网页,对网页自动化操作。
nnnn本文主要介绍Selenium的最简单的使用,看懂了去拓展会So ez。
nnnn二、环境准备
nnnn- n
- 安装python,配置环境变量(python和python Scripts的) nnnn
- 安装或更新pip nnnn
- 使用pip工具安装第三方库:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
nnnn - 下载并部署你浏览器对应的驱动。 nnnn
- 创建project,导入Python SDK n
三、代码
nnnn1、使用驱动获取指定页面元素
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)
nnnn2、获取完元素,定位元素
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
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_element
和 find_elements
上面八种定位方法最终都调用的是find_element
方法
driver.find_element(By.ID, "kw")ndriver.find_elements(By.TAG_NAME, "input")
nnnnfind_element:好处是方法名不会写死,定位方式可以通过参数传递,在一些框架中使用时会更加灵活一些。
nnnn定位方式 | 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_elements
_by_id
以下是返回的元素对象结果:
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
nnnn3、驱动对页面操作
nnnndriver.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
nnnn1、遍历爬取页面内所有图片属性
nnnnfrom 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
Comments NOTHING