如何通过Selenium和Python按html单击元素

时间:2018-08-17 18:46:56

标签: python selenium-webdriver

我在获取python硒来查找并单击链接时遇到问题。我正在尝试自动将学生评论输入D2L。 ICN_Feedback_3400653_125630,第一组数字是成绩项目ID,第二组数字是学生ID。我的计划是使用gspread的“接受注释”并将其通过硒粘贴到d2l中。但是,我无法单击弹出Java脚本文本框的链接。

我尝试了以下各种变化:

element = driver.find_elements_by_id('ICN_Feedback_3400653_125630')
element = river.find_element_by_xpath("""//*@id="ICN_Feedback_3400653_125630"]/d2l-icon""")
element = driver.find_element_by_css_selector("#ICN_Feedback_3400653_125630")
element.click()

find_element_by_id()不起作用,因为页面上有2个ID实例,一个是我需要的链接,另一个是在做什么?诚然,我对此并不精通。我会以错误的方式处理吗?

以下是我从中获取的信息来源:

<div class="dco" id="z_ch" style="display:inline;float:right;"><div 
class="dco_c" style="display:inline;"><a class="d2l-imagelink" 
id="ICN_Feedback_3400653_125630" href="javascript:void(0);" 
onclick="return false;" title="Enter comments for FIRSTNAME LASTNAME in a 
new window" aria-label="Enter comments for FIRSTNAME LASTNAME in a new 
window" 
role="button"><d2l-icon icon="d2l-tier1:edit" class="x-scope d2l-icon- 
0"><svg viewBox="0 0 18 18" preserveAspectRatio="xMidYMid meet"                         
focusable="false" class="style-scope d2l-icon" style="pointer-events: 
none; display: block; width: 100%; height: 100%;"><g class="style-scope 
d2l-icon"><path d="M2.85 10.907l-.672 1.407L.033 17.26a.535.535 0 0 0 0 
.368.917.917 0 0 0 .155.184.917.917 0 0 0 .184.155A.54.54 0 0 0 .56 
18a.48.48 0 0 0 .18-.033l4.946-2.145 1.407-.672 8.53-8.53-4.244- 
4.243zM4.857 14l-1.515.657L4 13.143l.508-1.064 1.415 1.413zM16.707 
5.537l-4.244-4.244.707-.707a2 2 0 0 1 2.83 0L17.414 2a2 2 0 0 1 0 2.83z" 
class="style-scope d2l-icon"></path></g></svg></d2l-icon></a>
</div></div>

1 个答案:

答案 0 :(得分:0)

根据您共享的 HTML 在所需元素上调用click(),您可以使用以下解决方案:

driver.find_element_by_xpath("//a[@class='d2l-imagelink'][starts-with(@id,'ICN_Feedback_')][contains(@title,'FIRSTNAME LASTNAME')]").click()

更新

在讨论Selenium Web Driver & Java. Element is not clickable at point (36, 72). Other element would receive the click:之后,您会看到错误元素不可点击 ,尝试使用executeScript()方法,如下所示:

myElement = driver.find_element_by_xpath("//a[@class='d2l-imagelink'][starts-with(@id,'ICN_Feedback_')][contains(@title,'FIRSTNAME LASTNAME')]")
driver.execute_script("arguments[0].click();", myElement)