Selenium webdriver - Python不会点击网站上的按钮

问题描述 投票:0回答:2

这是我关于Stack Overflow的第一个问题。我不是一个程序员,我刚刚了解了Selenium并尽可能地走了但是有这个错误我无法单独解决所以我正在寻求帮助。我在PyCharm中使用Python 2.7。

截至目前,我一直在使用anything.send_keys(Keys.ENTER)来点击我的代码中的一些按钮,因为.click()函数总是在Chrome中为我的网站返回一个ElementNotInteractableException错误。这里的目标只是清除文本区域,在那里插入基因列表并单击此“提交”按钮。这应该向我展示一个我想要下载的更新表。

对于这个麻烦的按钮,没有任何作用。问题是,它甚至没有返回错误,代码一直在继续,好像确实已经点击了,它最终下载了未更新的表。我尝试切换到Firefox,其中.click()和.send_keys(Keys.ENTER)都没有工作(我从来没有得到错误,它只是下载错误的表)。单击我自己可以工作并生成更新的表。

基于我在这里看到的其他问题,我尝试使用ActionChains或scroll_into_view,但仍然没有任何反应。这是代码:

baseline_url = "http://mtsspdb.noble.org/atlas-internal/3880/transcript/profile/5?charttype=barchart&sessionid=1553076490500118&feature_accs=%20Medtr1g079760.1"
driver = webdriver.Chrome("C:\Webdrivers\chromedriver.exe")
driver.set_page_load_timeout(30)
driver.get(baseline_url)
driver.maximize_window()

peptides_list = """Medtr4g068220.1
Medtr1g107390.1
Medtr1g018740.1
Medtr5g016470.1
Medtr4g095002.1
Medtr5g004930.1
MT4Noble_020581.1
Medtr1g107395.1
Medtr1g107400.1
Medtr1g107405.1
Medtr1g107410.1
Medtr4g095010.1
MT4Noble_057127.1
"""
WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, "//*[@id='feature_accs']")))
text_area = driver.find_element_by_xpath("//*[@id='feature_accs']")
text_area.clear()
text_area.send_keys(peptides_list)
time.sleep(1)
troublesome = driver.find_element_by_xpath("//*[@id='form1']/div[8]/div/input")
print troublesome
#scroll_into_view = troublesome.location_once_scrolled_into_view
ActionChains(driver).move_to_element(troublesome).send_keys(Keys.ENTER)

time.sleep(3)
print "Sucess for x"

这个按钮的html位置是

    <input class="btn btn-primary" type="submit" name="submit" value="Submit">

你对如何点击它有任何想法,最重要的是为什么它不起作用?

非常感谢

PS:正如我之前所说,这是我的第一个问题。请告诉我是否需要更新/更改内容。

python-2.7 selenium selenium-webdriver
2个回答
0
投票

这肯定会奏效,因为我刚刚尝试了你的信息

driver.execute_script("$('#form1').find('.btn-primary').click()")

现在,找到元素肯定有些奇怪,因为Selenium如果无法点击就会出错。因此,我们使用代码单击的元素不得包含我们期望的事件。我正在调查更多,并将详细更新。

编辑:有趣。提交按钮似乎没有正常的事件侦听器。

getEventListeners($(".btn-primary")[0]);
$._data($(".btn-primary")[0], "events");

这两个都没有回报。这似乎是Selenium问题的原因。它没有通过点击触发实际提交。 Selenium不使用Javascript,也不使用真正的user32.dll(Windows ex)点击,因此它并不总是与真正的点击或javascript点击相同。


0
投票

欢迎来到SO。这是单击按钮的选项。

选项1:使用javascript单击

driver.exeucte_script("arguments[0].click();",troublesome)

选项2:滚动到元素

troublesome.location_once_scrolled_into_view
troublesome.click()
© www.soinside.com 2019 - 2024. All rights reserved.