从python执行事件

时间:2019-07-03 13:49:03

标签: python html selenium events launch

作为python的初学者,我正在尝试创建一个简单的自动登录项目。我要做的另一件事是,在html表的第四行上单击鼠标,以显示适当的内容。该段的html代码为:

<tr class="tbl_seznam_barva_1" onclick="setTimeout('__doPostBack(\'ctl02$ctl00$BrowseSql1\',\'Select$0\')',470);" onmouseover="radekSeznamuClass=this.className;this.className='RowMouseOver';" onmouseout="this.className=radekSeznamuClass;">
  <td>virtuálny terminál</td>
</tr>

如何执行此“ onclick”事件?

from selenium import webdriver

#...

browser = webdriver.Firefox()

elem = browser.find_element_by_name('txtUsername')
elem.send_keys('myLogin' + Keys.RETURN)

elem = browser.find_element_by_xpath("//tr[4]")

# some code for event execution goes here...

2 个答案:

答案 0 :(得分:2)

如果您想对元素为click()的元素进行virtuálny terminál的操作,可以使用以下方法实现:

browser.find_element_by_xpath("//*[text()='virtuálny terminál']").click()

如果需要单击更多元素,则可以在所有元素上使用for循环。

elements = browser.find_element_by_xpath("//tr[4]")
for i in elements:
    print(i.text)

编辑:

您可以使用ActionChains

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser = webdriver.Firefox()

my_elem = browser.find_element_by_xpath("//tr[4]")
action = ActionChains(browser)
action.move_to_element(my_elem)
# action.move_to_element_with_offset(my_elem, 5, 5)
action.click()
action.perform()

Edit2:

如果您无法使用chromedriver,而您无事可做,则可以使用execute_script

element = browser.find_element_by_xpath("//tr[4]")
browser.execute_script("arguments[0].click();", element)

答案 1 :(得分:0)

问题是人们应该等待网页完全加载

elem.send_keys('myLogin' + Keys.RETURN)行之后,网页需要时间来呈现内容,因此应添加一个延迟时间:

import time

# ...

elem.send_keys('myLogin' + Keys.RETURN)
time.sleep(1)
elem=browser.find_element_by_xpath("//tr[4]")
elem.click()