硒蟒蛇使不可见元素可见
Selenium-python make invisible element visible
我正在使用selenium-python绑定来执行一些基本的浏览器测试。我需要单击一个默认情况下不可见的元素。我已通过is_displayed() method
进行了检查。因此,我尝试使用execute_script
方法,通过使用以下代码使其可见,但我收到了错误消息。这是一种常见的场景,我们需要使一个不可见的元素可见。必须有一些其他方法来绕过这类问题。如果有人指出我代码中的问题,那将很有帮助。我可以在python代码中用纯js点击一个元素吗?
print "getting keyword ideas"
searches = driver.find_element_by_xpath("//*[contains(text(), 'Avg. monthly searches')]")
driver.execute_script("arguments.style.visibility='visible';", searches)
以及错误消息:
追踪(最近一次通话):文件"C:''vhosts''phpsols''split''addwords.py",第140行,位于driver.execute_script("arguments.style.visibility='visible';",搜索)文件"C:''anaconda32''lib''site packages''selenium''webdriver''remote''webdriver.py",execute_script中的第429行{'script':脚本,args:converted_args})["value"]文件"C:''anaconda32''lib''site packages''selenium''webdriver''remote''webdriver.py",第201行,执行中self.error_handler.check_response(响应)文件"C:''anaconda32''lib''site packages''selenium''webdriver''remote''errorhandler.py",第181行,在check_response中引发exception_class(消息、屏幕、堆栈)selenium.com.mon.exceptions.WebDriverException:消息:{"errorMessage":"未定义不是对象(正在评估arguments.style.visibility='visible')","request":{"headers":{"Accept":"application/json","Accept Encoding":"identity","Connection":"close","Content-Length":"210","Content-Type":"applications/json;charset=UTF-8","Host":"127.0.0.1:55867","User Agent":"Python urllib/2.7"},"httpVersion":"1.1","method":"POST","POST":''"8f05e120-f672-11e5-91c5-c7097c43ddb4''",''"args''":["element-6066-11e4-a52e-4f735466cecf''":''":wdc:1459340795815''",''"ELEMENT''":''":wdc:1459340795815''"}],''"script''":''"arguments.style.visibility='visible';''"}","url":"/execute","urlParsed":{"anchor":","query":":["execute"]},"urlOriginal":"/session/8f05e120-f672-11e5-91c5-c7097c43ddb4/execute"}}"屏幕截图:可通过屏幕获得
<div id="gwt-debug-column-SEARCH_VOLUME_PRIMARY-header-0-0">
<div style="text-align:right">Avg. monthly searches
<span class="table-tooltip" id="gwt-debug-tooltip-4580983"> </span>
<br>
</div>
</div>
以下是python代码:
print "getting keyword ideas"
driver.execute_script('document.getElementById("gwt-debug-column-SEARCH_VOLUME_PRIMARY-header-0-0").style.visibility = "visible";')
driver.execute_script('document.getElementById("gwt-debug-column-SEARCH_VOLUME_PRIMARY-header-0-0").style.display = "block";')
searches = driver.find_element_by_xpath("//*[contains(text(), 'Avg. monthly searches')]")
if searches.is_displayed():
print "searches is visible"
else:
print "searches isn't visible"
avg_monthly_searches = driver.find_elements_by_id("gwt-debug-column-SEARCH_VOLUME_PRIMARY-header-0-0")
for avg in avg_monthly_searches:
if avg.is_displayed():
print "element is visible, so clicking ..."
actions = ActionChains(driver)
actions.click(on_element=avg).perform()
time.sleep(10)
print "scrolling to the bottom"
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print "getting the page source as interpreted by chromedriver"
driver.execute_script('return document.documentElement.innerHTML')
print "getting keyword ideas source"
content = driver.page_source
with open('keyword_ideas.html', 'w') as f:
f.write(content.encode('utf-8'))
time.sleep(5)
print "getting html"
dom = DOM(content)
print "traversing ... "
for e in dom('td.spgb-f'):
for a in e('a.sptc-e.sptc-h'):
print repr(plaintext(a.content))
else:
print "element isn't visible"
尝试以下代码:
driver.execute_script('document.getElementById("gwt-debug-column-SEARCH_VOLUME_PRIMARY-header-0-0").style.visibility = "visible";')
driver.execute_script('document.getElementById("gwt-debug-column-SEARCH_VOLUME_PRIMARY-header-0-0").style.display = "block";')
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在Jquery detachment()和appendTo()之后定位元素
- 在动态创建的元素上获取对特定选择器的引用
- 根据元素和容器大小计算边距