当前位置: 首页 > 科技观察

不能这样教?我必须自己做!

时间:2023-03-12 13:16:37 科技观察

本文转载自微信公众号《Python技术》,作者:佩森酱。转载本文请联系Python技术公众号。我上次提到了还有其他方法可以找到搜索框吗?答案是当然有。并且为了满足大多数场景,元素的定位方式有很多种。今天,我们继续学习Python如何使用Selenium来自动控制浏览器。定位元素如果要在网页上操作一个元素,不管是点击、键入、拖动等任何操作,第一步都是定义元素。因为每个元素对象都包含很多属性,我们可以很容易地通过这些属性中的一个或多个找到它。以下是几种常用的定位元素的方法:find_element_by_id():通过元素的id属性来定位,是最常用的定位方式。一般来说,id属性在一个网页包含的所有元素中是唯一的,定位速度快且准确,首选推荐。find_element_by_name():通过元素的name属性定位。这是第二种推荐方法。有些元素没有id,但基本上有名字,但可能有重名。find_element_by_class_name():通过元素的class属性定位。通常,HTML中的元素都会有一个类来描述样式。find_element_by_link_text():这个是通过对应的链接文本对象来定位的,只有当文本有超链接的时候才会用到。find_element_by_partial_link_text():类似于find_element_by_link_text(),但只能是超链接文本的一部分。find_element_by_tag_name():可以通过元素的标签名定位,但是这样容易重复,同时返回多个元素。find_element_by_css_selector():这是通过css定位的。CSS是一种用于渲染元素样式的样式表语言,是网页元素的重要组成部分。find_element_by_xpath():这是一个可以通过HTML结构定位的方法,可以通过根节点逐层定位找到最终的元素。但是这种方法在文档结构发生变化时可能会失败,所以不推荐使用。这么多的定位方式基本可以满足大部分场景的需求。还有一些其他方法,这里不再赘述。下面我列举这些定位的例子,大家就知道怎么用了://importwebdriverfromseleniumimportwebdriver//executable_path用来指定驱动存放路径browser=webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')//打开百度页面browser.get('https://wwww.baidu.com/')//在搜索框中输入`pythonselenium`点击搜索返回结果browser.find_element_by_id("kw").send_keys("pythonselenium")//name属性定位b??rowser.find_element_by_name("wd").send_keys("pythonselenium")//classname属性定位b??rowser.find_element_by_class_name("s_ipt").send_keys("pythonselenium")//link用于定位浏览器的文本属性。find_element_by_link_text("关于百度").click()//tagname属性定位browser.find_element_by_tag_name("input").send_keys("pythonselenium")//CSS方式定位browser.find_element_by_css_selector("#kw").send_keys("pythonselenium")//xpath方式定位browser.find_element_by_xpath("//input[@id='kw']").send_keys("pythonselenium")//点击百度按钮browser.find_element_by_id("su").click()元素定位到了,接下来就是看如何操作元素对象了。上面的操作元素我们说了元素是如何定位和找到的,那么定位找到元素之后,我们可以做什么呢?我一一说一下:send_keys():这个是最常用的,就是模拟对元素的按键操作,输入你参数传入的字符串,主要是在操作文本输入的时候用到click()box:这个方法也比较常见,就是对元素对象进行鼠标点击操作,主要用来操作按钮或者超链接文本。submit():如果是操作表单,可以调用该方法提交表单内容。clear():如果对象有可以清除的内容,比如文本输入框,清除输入的内容。text():该方法主要用于获取元素的文本内容。操作例子好了,上面介绍了这么多,现在来看一个实际的例子:让浏览器自动输入https://www.jd.com/,打开京东官网,然后搜索ps5国家银行,搜索产品名称和金额打印出来。例子不复杂,直接看代码:#导入库fromseleniumimportwebdriverimporttime#executable_path用于指定驱动存放路径browser=webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')#打开京东官方网站browser.get('https://www.jd.com/')#browser.find_element_by_id("kw").send_keys("pythonselenium")#获取输入框对象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="varq=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')#遍历并打印出当前页的所有标题和数量forname,priceinzip(names,prices):print(name.text.replace('\n',''),price.text)#退出浏览器browser.quit()代码中每一行我都做了注释,大家可以了解每一行的作用。接下来,我们直接运行代码pythontest.py。可以看到浏览器自动启动后,进行了相关操作,然后退出。下面是执行截图:执行完成后,我们可以看到控制台已经打印出了相应的信息:总结一下,今天介绍了selenium定位元素的多种方法,还有哪些操作我们可以在找到它们后对它们进行操作。并且写了一个简单的自动化运行的例子供大家参考,后面会详细介绍给大家。