我的目标是打开一个网页,然后单击特定应用程序的应用程序按钮,如Anaplan。在过去,我通过CSS选择器将get元素与class和IDas shown in this past post结合使用
first_item = driver.find_element_by_id("anaplan")
我遇到过一个网页,其中的按钮似乎没有任何ID或唯一值:
Anaplan应用程序按钮的HTML输出:
<a
aria-label="launch app Anaplan"
class="chiclet a--no-decoration"
data-se="app-card"
href="https://gartner.okta.com/home/anaplan/0oaforg08lyATdLuw4x6/2487"
draggable="true"
><article class="chiclet--article">
<button
class="chiclet--action"
tabindex="0"
aria-label="Settings for Anaplan"
data-se="app-card-settings-button"
>
<svg
class="chiclet--action-kebab"
width="20"
height="4"
viewBox="0 0 20 4"
fill="#B7BCC0"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="2" cy="2" r="2"></circle>
<circle cx="10" cy="2" r="2"></circle>
<circle cx="18" cy="2" r="2"></circle>
</svg>
</button>
<section class="chiclet--main" data-se="app-card-main">
<img
class="chiclet--main-logo"
src="https://ok11static.oktacdn.com/fs/bcg/4/gfs1ev15ab63zqgZ91d8"
alt="Anaplan logo"
/>
</section>
<footer class="chiclet--footer" data-se="app-card-footer">
<o-tooltip content="Anaplan" position="bottom" class="hydrated"
><div slot="content"></div>
<div aria-describedby="o-tooltip-0">
<h1 class="chiclet--app-title" data-se="app-card-title">Anaplan</h1>
</div>
</o-tooltip>
</footer>
</article>
</a>
我抓取了Anaplan按钮的Xpath,它显示了以下内容:
/html[@class='hydrated wf-proximanova-n4-inactive wf-
inactive']/body[@class='default']/div[@id='root']
/div[@class='enduser-app ']/section[@class='content-frame']
/main[@class='main-container has-top-bar']/div[@class='dashboard--main']/section[@id='main-
content']/section[@class='chiclet-area']
/section[@class='chiclet-grid--container']
/section/section[@class='chiclet-grid section-appear-done section-enter-done']
/a[@class='chiclet a--no-decoration'][1]/article[@class='chiclet--article']
应用程序之间的唯一区别在于括号中的数字:
/a[@class='chiclet a--no-decoration'][1]
,其中1似乎是Anaplan,3是G驱动器,依此类推。有没有一种方法可以选择这样的元素,其中似乎根本没有唯一标识符
要定位第一个按钮,您可以使用以下
xpath
s//a[@aria-label='launch app Anaplan']
或//a[contains(@href,'anaplan')]
中的一个,还有许多其他独特的组合。用css selectors
也可以做到这一点 与上述类似,此处提供的所有其他导航按钮也有多种组合。
如果元素位于
<iframe>
内,则必须首先切换到该<iframe>
,然后再从中退出。用
找到
<iframe>
iframe = driver.find_element_by_xpath("//iframe[@name='iframeName']")
或与之匹配的任何定位器然后
switch_to
<iframe>
:driver.switch_to.frame(iframe)
如果在此之后您需要继续执行
<iframe>
之外的任何位置,请使用将其切换出来
driver.switch_to.default_content()
xpath和css都可以。 {}的示例:
安纳普兰:
或:
垃圾邮件隔离:
G套房
其主要思想是,您可以通过编写属性的部分名称来查找元素
更新:
如果某个元素位于iframe内部,则应等待加载并切换到该元素。Selenium有非常方便的方法:框到可用,切换到可用
切换到iframe后,可以使用其中的元素
相关问题 更多 >
编程相关推荐