pathon selenium爬虫里面如何定位一个button元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pathon selenium爬虫里面如何定位一个button元素?相关的知识,希望对你有一定的参考价值。

button代码如下,请问通过webdriver和selenium怎样可以定位到这个按钮,并提交click动作?
<div id= "h">
<button class = "btn" href ="#">登陆</button>
</div>
<div id= "s" style="display:none;">
<button class = "btn" href ="#">登陆</button>
</div>

参考技术A XPath 定位
第一个button
//div[@id="h"]/button
第二个button
//div[@id="s"]/button
定位到元素后 对象后面加.click()就是点击了追问

感谢回答,但是这个页面只有一个button,我也不懂为什么源代码里面有两个button出现?现在已经可以输入账号和密码,但是点击这个‘登录’按钮做不到,请再回复一下,万分感谢

追答

打开浏览器开发者工具,找到元素查找器,就是最左边有个箭头图标的那个,然后选中你要定位的元素,就是你现在的登陆按钮

追问

是这个吧?请问这个元素怎么定位?

追答

选中元素直接点击,就会跳到要定位的元素

本回答被提问者采纳

Python爬虫 Selenium -- Selenium元素定位Selenium访问元素信息Selenium交互

游览之前先看 Selenium简介、安装Selenium、Selenium基本使用,有助于理解后面的知识点。

1. Selenium元素定位

元素定位:自动化要做的就是模拟鼠标和键盘来操作来操作这些元素,点击、输入等等。操作这些元素前首先 要找到它们,WebDriver提供很多定位元素的方法。

我们下面演示的案例都是基于百度的首页:

1.1 find_element_by_id

#根据id查找元素
eg:button = browser.find_element_by_id('su')

示例代码:

可以看见百度一下的id为 su

from selenium import webdriver

path = 'exe/chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

# 元素定位
# 根据id来找到对象
button = browser.find_element_by_id('su')
print(button)

运行结果:


1.2 find_elements_by_name

# 根据标签属性的属性值来获取对象
eg:name = browser.find_element_by_name('wd')

示例代码:

可以看见输入框的name 为 wd

from selenium import webdriver

path = 'exe/chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

# 元素定位
# 根据标签属性的属性值来获取对象
button = browser.find_element_by_name('wd')
print(button)

运行结果:


1.3 find_elements_by_xpath

xpath基础

# 根据xpath语句来获取对象
eg:xpath1 = browser.find_elements_by_xpath('//input[@id="su"]')

示例代码:

from selenium import webdriver

path = 'exe/chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

# 元素定位
# 根据xpath语句来获取对象
button = browser.find_elements_by_xpath('//input[@id="su"]')
print(button)

运行结果:


1.4 find_elements_by_tag_name

# 根据标签的名字来获取对象
eg:names = browser.find_elements_by_tag_name('input')

示例代码:

from selenium import webdriver

path = 'exe/chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

# 元素定位
# 根据标签的名字来获取对象
button = browser.find_elements_by_tag_name('input')
print(button)

运行结果:


1.5 find_elements_by_css_selector

bs4基础

# 使用的bs4的语法来获取对象
eg:my_input = browser.find_elements_by_css_selector('#kw')[0]

示例代码:

from selenium import webdriver

path = 'exe/chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

# 元素定位
# 使用的bs4的语法来获取对象
button = browser.find_elements_by_css_selector('#su')
print(button)

运行结果:


1.6 find_elements_by_link_text

# 根据链接标签里面的值找到链接标签
eg:browser.find_element_by_link_text("新闻")

示例代码:

from selenium import webdriver

path = 'exe/chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'https://www.baidu.com'
browser.get(url)

# 元素定位
# 根据链接标签里面的值找到链接标签
button = browser.find_element_by_link_text('新闻')
print(button)

运行结果:


2. Selenium访问元素信息

获取元素属性 
	.get_attribute('class') 
获取元素文本 
	.text 
获取标签名 
	.tag_name

示例代码:

from selenium import webdriver

path = 'exe/chromedriver.exe'
browser = webdriver.Chrome(path)

url = 'http://www.baidu.com'
browser.get(url)

input = browser.find_element_by_id('su')

# 获取标签的属性
print(input.get_attribute('class'))
# 获取标签的名字
print(input.tag_name)

# 获取元素文本 获取的是标签中间的文本 里面 <a>新闻</a> 里面的 “新闻”
a = browser.find_element_by_link_text('新闻')
print(a.text)

运行结果:


3. Selenium交互

点击:click() 
输入:send_keys() 
后退操作:browser.back() 
前进操作:browser.forword() 
模拟JS滚动: js='document.documentElement.scrollTop=100000' 
执行js代码: browser.execute_script(js) 
获取网页代码:page_source 
退出:browser.quit()
扩展:保存屏幕快照:browser.save_screenshot('baidu.png')
from selenium import webdriver

# 创建浏览器对象
path = './exe/chromedriver.exe'
browser = webdriver.Chrome(path)

# url
url = 'https://www.baidu.com'
browser.get(url)

import time

time.sleep(2)

# 获取文本框的对象
input = browser.find_element_by_id('kw')

# 在文本框中输入周杰伦
input.send_keys('周杰伦')

time.sleep(2)

# 获取百度一下的按钮
button = browser.find_element_by_id('su')

# 点击按钮
button.click()

time.sleep(2)

# 滑到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)

time.sleep(2)

# 获取下一页的按钮
next = browser.find_element_by_xpath('//a[@class="n"]')

# 点击下一页
next.click()

time.sleep(2)

# 回到上一页
browser.back()

time.sleep(2)

# 回去
browser.forward()

time.sleep(3)

# 退出
browser.quit()

运行结果:



以上是关于pathon selenium爬虫里面如何定位一个button元素?的主要内容,如果未能解决你的问题,请参考以下文章

python selenium+ie 如何定位js生成的元素?

java+selenium,请问该如何定位#shadow-root里面的元素?

Python爬虫 Selenium -- Selenium元素定位Selenium访问元素信息Selenium交互

爬虫+自动化利器 selenium 之自学成才篇

[python爬虫] Selenium常见元素定位方法和操作的学习介绍

Selenium用法详解定位页面元素JAVA爬虫