正在执行来自 python 的事件
Executing an event from python
作为 python 的初学者,我正在尝试制作一个简单的自动登录项目。我还需要做的另一件事是鼠标单击 html table 的第 4 行以显示正确的内容。该段的 html 代码是:
<tr class="tbl_seznam_barva_1" onclick="setTimeout('__doPostBack(\'ctl02$ctl00$BrowseSql1\',\'Select[=11=]\')',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...
如果您想 click()
文本为 virtuálny terminál
的元素,您可以通过以下方式实现:
browser.find_element_by_xpath("//*[text()='virtuálny terminál']").click()
如果您需要点击更多元素,您可以对所有元素使用 for-loop。
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()
编辑2:
如果您不会使用 chromedriver 并且又无事可做,您可以使用 execute_script
:
element = browser.find_element_by_xpath("//tr[4]")
browser.execute_script("arguments[0].click();", element)
问题是应该等待网页完全加载
在 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()
作为 python 的初学者,我正在尝试制作一个简单的自动登录项目。我还需要做的另一件事是鼠标单击 html table 的第 4 行以显示正确的内容。该段的 html 代码是:
<tr class="tbl_seznam_barva_1" onclick="setTimeout('__doPostBack(\'ctl02$ctl00$BrowseSql1\',\'Select[=11=]\')',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...
如果您想 click()
文本为 virtuálny terminál
的元素,您可以通过以下方式实现:
browser.find_element_by_xpath("//*[text()='virtuálny terminál']").click()
如果您需要点击更多元素,您可以对所有元素使用 for-loop。
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()
编辑2:
如果您不会使用 chromedriver 并且又无事可做,您可以使用 execute_script
:
element = browser.find_element_by_xpath("//tr[4]")
browser.execute_script("arguments[0].click();", element)
问题是应该等待网页完全加载
在 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()