文|极光
正如前面提到的,还有其他方法可以找到搜索框吗? 答案其实是有的。 为了满足大多数场景javascript获取滚动条,元素的定位方式有很多种。 明天我会继续和大家学习如何在Python中使用Selenium来手动控制浏览器。
如果要操作网页中的某个元素,无论是点击、输入、拖放等,第一步都是定义该元素。 由于每个元素对象都包含多个属性,我们可以通过其中的一个或几个属性轻松找到它。
定位方式非常多,基本可以满足大部分场景的需求。 还有一些其他的方法,这里就不说了。
// 导入 webdriver
from selenium import webdriver
// executable_path 用于指定driver存放路径
browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')
// 打开百度页面
browser.get('https://wwww.baidu.com/')
// 在搜索框内输入 `python selenium` 并点搜索返回结果
browser.find_element_by_id("kw").send_keys("python selenium")
// name 属性定位
browser.find_element_by_name("wd").send_keys("python selenium")
// class name 属性定位
browser.find_element_by_class_name("s_ipt").send_keys("python selenium")
// 链接 text 属性定位
browser.find_element_by_link_text("关于百度").click()
// tag name 属性定位
browser.find_element_by_tag_name("input").send_keys("python selenium")
// CSS 方式定位
browser.find_element_by_css_selector("#kw").send_keys("python selenium")
// xpath 方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("python selenium")
// 点击 百度一下 按钮
browser.find_element_by_id("su").click()
元素已经定位了,接下来看如何操作元素对象。
操作元件
前面我们讨论了如何定位和发现元素。 定位并找到元素后,我们可以对其进行哪些操作呢? 下面我来一一解释:
操作示例
让浏览器手动输入,打开易迅官网,然后搜索PS5国行,复制搜索到的产品名称和金额。
# 导入库
from selenium import webdriver
import time
# executable_path 用于指定driver存放路径
browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')
# 打开京东官网
browser.get('https://www.jd.com/')
# browser.find_element_by_id("kw").send_keys("python selenium")
# 获取输入框对象
search = browser.find_element_by_xpath('//*[@id="key"]')
# 输入想要搜索的关键词,如"ps5国行"
search.send_keys('ps5国行')
# 获取搜索按钮对象并单击
browser.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()
# 将滚动条移动到页面底部,用于加载所有信息
javascript = "var q=document.documentElement.scrollTop=50000"
# 执行 javascript 移动滚动条
browser.execute_script(javascript)
# 等待3秒,有些异步加载的数据加载慢
time.sleep(3)
# 通过查看页面源码得到金额的 xpath 路径,并获取金额
prices = browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[2]/strong/i')
# 通过查看页面源码得到商品标题的 xpath 路径,并获取商品标题
names = browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[3]/a/em')
# 遍历打印出当前页所有标题和金额
for name,price in zip(names,prices):
print(name.text.replace('n',''),price.text)
#退出浏览器
browser.quit()
我已经对代码中的每一行进行了注释,以便您可以理解每一行的作用。 接下来我们直接运行代码pythontest.py。 可以看到,手动启动浏览器后,执行了相关操作,然后退出。 下面是执行截图:
好吧,明天我们会介绍selenium定位元素的各种方式javascript获取滚动条,以及找到元素后我们可以对元素进行哪些操作。 我还写了一个简单的手动操作的反例供大家参考。 稍后我会向大家介绍更多。 好吧,我们明天再谈这个。 喜欢的话记得点击观看。