首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用相同的xpath、类单击几个按钮

如何使用相同的xpath、类单击几个按钮
EN

Stack Overflow用户
提问于 2021-11-10 15:32:43
回答 1查看 906关注 0票数 1

单击LinkedIn页面上的每个按钮都有问题。在一些个人资料中,包含了很多关于工作经历、学校、执照的信息,我们必须通过点击“显示更多的按钮”来扩展这些信息。

样本剖面1

样本剖面2

我尝试了许多方法,比如使用Xpath搜索元素,然后循环它们来单击页面上的每个按钮,但是都没有工作--因为每个按钮类都与使用selenium的其他元素相同。我认为,第一个“显示更多”按钮总是用于体验部分,代码使作业单击它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.driver.execute_script("arguments[0].click();", WebDriverWait(
            self.driver, 3).until(EC.element_to_be_clickable((By.XPATH, "//li-icon[@class='pv-profile"
                                                                        "-section__toggle-detail-icon']"))))

然后我们有教育部门,执照和认证部门--这给我带来了麻烦。临时解决方案是单击包含字符串的元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.driver.find_element_by_xpath("//*[contains(text(), 'Pokaż więcej')]").click()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.driver.find_element_by_xpath("//*[contains(text(), 'Pokaż 1 uczelnię więcej')]").click()

早晚我就知道代码有很多限制。有没有人对如何解决这个问题有更好的想法?

解决方案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
containers = self.driver.find_elements_by_xpath("//li-icon[@class='pv-profile-section__toggle-detail-icon']")
    for button in containers:
        self.driver.execute_script('arguments[0].click()', button)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 16:10:05

我用自己的代码测试了页面,看起来您可以使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
items = driver.find_elements(By.XPATH, '//div[@class="profile-detail"]//button')

for item in items:
    driver.execute_script("arguments[0].click();", item)

但可能还有其他问题。页面使用"lazy loading",它可能需要使用JavaScript代码,该代码向下滚动以加载所有组件。

这是我的完整代码,在评论中有一些想法。

我也尝试过在部分中选择按钮,但并不是所有的方法都有效。

但也许它会对其他的想法有用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException, TimeoutException
import time

USERNAME = 'XXXXX'
PASSWORD = 'YYYYY'

url = 'https://www.linkedin.com/in/jakub-bialoskorski/?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAABp5UJ8BDpi5ZwNGebljqDlYx7OXIKgxH80'

driver = webdriver.Firefox()

# -------------------------------------

driver.get(url)
time.sleep(5)

#wait = WebDriverWait(driver, 10)

cookies = driver.find_element(By.XPATH, '//button[@action-type="ACCEPT"]')
cookies.click()
time.sleep(1)

link = driver.find_element(By.XPATH, '//p[@class="authwall-join-form__subtitle"]/button')
link.click()
time.sleep(1)

login_form = driver.find_element(By.XPATH, '//div[@class="authwall-sign-in-form"]')
time.sleep(1)

username = login_form.find_element(By.XPATH, '//input[@id="session_key"]')
username.send_keys(USERNAME)
password = login_form.find_element(By.XPATH, '//input[@id="session_password"]')
password.send_keys(PASSWORD)
time.sleep(1)

#button = login_form.find_element(By.XPATH, '//button[@type="submit"]')
button = login_form.find_element(By.XPATH, '//button[contains(text(), "Zaloguj się")]')
button.click()
time.sleep(5)

# -------------------------------------

url = 'https://www.linkedin.com/in/jakub-bialoskorski/?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAABp5UJ8BDpi5ZwNGebljqDlYx7OXIKgxH80'

#from selenium.webdriver.common.action_chains import ActionChains

driver.get(url)
time.sleep(5)

# -----------

print('... scrolling for lazy loading ...')
     
last_height = 0
while True:
    
    driver.execute_script("window.scrollTo(0, window.scrollY + window.innerHeight);")
    time.sleep(2)    

    new_height = driver.execute_script("return window.scrollY")
    if new_height == last_height:
        break
    last_height = new_height      

# -----------

def click_items(items):
    for item in items:
        print('text:', item.text)

        #print(item.get_attribute('innerHTML'))

        #print('... scrolling ...')
        #ActionChains(driver).move_to_element(item).perform()
       
        print('... scrolling ...')
        driver.execute_script("arguments[0].scrollIntoView(true);", item)
        
        #print('... clicking ...')
        #item.click()
        #time.sleep(1)

        print('... clicking ...')
        driver.execute_script("arguments[0].click();", item)
        time.sleep(1)
        
        print('----')
   
print('\n>>> Pokaż <<<\n')

#items = driver.find_elements(By.XPATH, '//button[contains(text(), "Pokaż")]')
#click_items(items)

print('\n>>> Doświadczenie - Pokaż więcej <<<\n')

#section = driver.find_elements(By.XPATH, '//section[@id="experience-section"]')
#items = driver.find_elements(By.XPATH, '//button[contains(text(), "zobacz wi")]')
items = driver.find_elements(By.XPATH, '//button[contains(@class, "inline-show-more-text__button")]')
click_items(items)

print('\n>>> Umiejętności i potwierdzenia - Pokaż więcej  <<<\n')

#section = driver.find_elements(By.XPATH, '//section[@id="experience-section"]')
items = driver.find_elements(By.XPATH, '//button[@data-control-name="skill_details"]')
click_items(items)

print('\n>>> Wyświetl <<<\n')

items = driver.find_elements(By.XPATH, '//button[contains(text(), "Wyświetl")]')
click_items(items)

print('\n>>> Rekomendacje <<<\n')

items = driver.find_elements(By.XPATH, '//button[@aria-controls="recommendation-list"]')
click_items(items)

print('\n>>> Osiągnięcia <<<\n')

print('--- projects ---')
items = driver.find_elements(By.XPATH, '//button[@aria-controls="projects-expandable-content"]')
click_items(items)

print('--- languages ---')
items = driver.find_elements(By.XPATH, '//button[@aria-controls="languages-expandable-content"]')
click_items(items)

# --- all buttons ---
#items = driver.find_elements(By.XPATH, '//div[@class="profile-detail"]//button')
#click_items(items)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69921461

复制
相关文章
类模块应用示例:获取单击的命令按钮名称
这个示例来源于ozgrid.com,有兴趣的朋友可以研究。在用户窗体上共有24个命令按钮,如下图1所示。
fanjy
2023/10/04
2950
类模块应用示例:获取单击的命令按钮名称
HTML单击按钮弹出悬浮窗+页面遮罩
<meta charset="utf-8" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
用户7718188
2021/10/08
15.8K1
Android之按钮点击事件(单击、双击、长按等)
在布局文件中添加按钮点击事件 1、在xml文件中 为 Button 添加android:onclick属性
程思扬
2023/07/24
2.4K0
chrome xpath的使用
最近研究爬虫的时候,发现chrome也支持xpath,用法如下,在console中输入
用户2936342
2018/08/27
1.1K0
chrome xpath的使用
几个不错的CSS按钮闪烁动画
@-webkit-keyframes bigAssButtonPulse { from { background-color: #749a02; -webkit-box-shadow: 0 0 25px #333; } 50% { background-color: #91bd09; -webkit-box-shadow: 0 0 50px #91bd09; } to { background-color: #749a02; -webkit-box-shadow: 0 0
紫旭Blog - blog.zixutech.cn
2020/01/01
3K0
选择篇(039)-单击按钮时event.target是什么?
导致事件的最深嵌套元素是事件的目标。你可以通过event.stopPropagation停止冒泡
齐丶先丶森
2022/05/12
1.6K0
Scrapy中Xpath的使用
请注意,本文编写于 990 天前,最后修改于 990 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
9160
Python:XPath与lxml类库
W3School官方文档:http://www.w3school.com.cn/xml/index.asp
Lansonli
2021/10/09
1.6K0
04.Xpath的使用
一.Xpath简介 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。相比于BeautifulSoup,Xpath在提取数据时会更有效率。 二.怎么做? 安装: pip install lxml 导包: from lxml import etree 使用: page = etree.HTML('html代码') # 解析并返回了 html 节点(解析HTML文档) print(type(page)) #<class 'lxml.et
见贤思齊
2020/08/05
7330
python selenium xpath使用
/ 表示绝对路径,绝对路径是指从根目录开始 //表示相对路径 .表示当前层 ..表示上一层 *表示通配符 @表示属性 []属性的判断条件表达式
用户5760343
2022/05/13
9150
Python中使用Xpath
XPath介绍: 是什么? 全称为XML Path Language 一种小型的查询语言 说道XPath是门语言,不得不说它所具备的优点: 1) 可在XML中查找信息 2) 支持HTML的查找 3) 通过元素和属性进行导航
慕白
2018/09/21
1.3K0
委托(一个主窗体统计多个从窗体的按钮单击的次数)
  最近在学习金老师的《.NET2.0面向对象编程揭秘》,学到了13章,委托、事件驱动和异步调用。书上有个试一试,要求:利用委托,达到一个主窗体统计多个从窗体的按钮单击的次数。 效果如下: fr
八哥
2018/01/18
1.4K0
委托(一个主窗体统计多个从窗体的按钮单击的次数)
Python——爬虫入门XPath的使用
Xpath即为XML路径语言(XML Path Language)。它是一种用来确定XML文档中某部分位置的语言。
Originalee
2018/08/30
8170
Xpath Helper的安装和使用
为了帮助大家快速掌握 Xpath 表达式的使用,这里给大家推荐一款 Xpath 表达式匹配助软件,它就是 Xpath Helper。
用户10002156
2023/08/11
2.9K0
Xpath Helper的安装和使用
XPath 使用笔记
xpath 的语法主要是使用的 /name/*[]|//*[@name] 的语法规则。
zucchiniy
2020/05/22
4030
XPath 使用笔记
XPath 是 XML 的查询语言,和 SQL 的角色很类似。以下面 XML 为例,介绍 XPath 的语法
zucchiniy
2019/10/30
3790
python下使用XPath
要使用XPath,先要安装lxml,直接命令行pip install lxml xpath基本介绍:廖雪峰博客关于xpath基本介绍 import lxml html selector = lxml.fromstring('网页源码`) info = selecotr.xpath('一段xpath语句')
槽痞
2020/06/23
4500
Python案例:使用XPath的爬虫
现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地。
Lansonli
2021/10/09
3780
解析神器xpath使用教程
介绍 XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,可用来在 HTML\XML 文档中对元素和属性进行遍历。 为什么要学习xpath和parsel parsel是一款高性能的 Python HTML/XML 解析器。 将字符串转化为Selector对象,Selector对象具有xpath的方法,返回结果的列表,能够接受bytes类型的数据和str类型的数据。 我们可以利用XPath,来快速的定位特定元素以及获取节点信息 节点 每个html的标签我们都称
Eternity
2022/08/24
1.1K0
解析神器xpath使用教程
点击加载更多

相似问题

使用xpath单击按钮

314

无法为相同的xpath单击多个按钮

20

如何使用动态xpath单击同名按钮?

14

单击XPath按钮

74

如何使用selenium xpath单击登录按钮

37
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文