在 Python 中使用 Selenium 执行 JavaScript 后存储结果
storing result after executing javascript with selenium in python
我正在尝试使用硒在锚标签内执行javascript函数,并试图将该结果存储在某个地方
网页代码:
<td>
<td>
<ul class="compare">
<li class="floatRight dividLineLeft category_page_navigation">
<div class="page_navigation">
<span id="ctl00_ctl00_ContentPlaceHolder1_ItemListPlaceHolder_pager1">
<a style="width: 22px; height: 22px;" disabled="disabled">
<a style="width: 22px; height: 22px;" href="javascript:__doPostBack('ctl00$ctl00$ContentPlaceHolder1$ItemListPlaceHolder$pager1$ctl00$ctl01','')">
</span>
</div>
</li>
</ul>
</td>
下面是我的代码
from selenium import webdriver
driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get("http://www.e3050.com/Items.aspx?cat=SON");
anchor_tags = driver.find_element_by_xpath("//div[@class='page_navigation']/span[@id='ctl00_ctl00_ContentPlaceHolder1_ItemListPlaceHolder_pager1']")
anchor_tags_res = anchor_tags.find_elements_by_tag_name("a")
for anchor_tag in anchor_tags_res:
href=[]
href.append(anchor_tag.get_attribute("href"))
for i in href:
element = driver.execute_script(i)
print element
在这里,我能够从锚标签中获取 href,但是当我尝试执行如上所示时,它会显示以下错误。当我使用 click() 函数时,例如
for anchor_tag in anchor_tags:
anchor_tag.click()
javascript执行正常,但我想存储执行的结果,因为在上面的代码中javascript函数只不过是生成分页的
结果:
---------------------------------------------------------------------------
WebDriverException Traceback (most recent call last)
/home/local/<ipython console> in <module>()
/usr/lib/python2.7/site-packages/selenium-2.21.3-py2.7.egg/selenium/webdriver/remote/webdriver.pyc in execute_script(self, script, *args)
383 converted_args = list(args)
384 return self.execute(Command.EXECUTE_SCRIPT,
--> 385 {'script': script, 'args':converted_args})['value']
386
387 def execute_async_script(self, script, *args):
/usr/lib/python2.7/site-packages/selenium-2.21.3-py2.7.egg/selenium/webdriver/remote/webdriver.pyc in execute(self, driver_command, params)
151 response = self.command_executor.execute(driver_command, params)
152 if response:
--> 153 self.error_handler.check_response(response)
154 response['value'] = self._unwrap_value(
155 response.get('value', None))
/usr/lib/python2.7/site-packages/selenium-2.21.3-py2.7.egg/selenium/webdriver/remote/errorhandler.pyc in check_response(self, response)
123 if exception_class == ErrorInResponseException:
124 raise exception_class(response, value)
--> 125 raise exception_class(value)
126 message = ''
127 if 'message' in value:
WebDriverException: Message: '{"sessionId":"ed4b6f549a9902254bc49399cddbe79a","status":400,"value":{"message":"No script specified"}}'
那么在硒中执行javascript后如何存储结果
提前感谢...
编辑的代码:
from selenium import webdriver
driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get("http://www.e3050.com/Items.aspx?cat=SON");
anchor_tags = driver.find_element_by_xpath("//div[@class='page_navigation']/span[@id='ctl00_ctl00_ContentPlaceHolder1_ItemListPlaceHolder_pager1']")
all_options = anchor_tags.find_elements_by_tag_name("a")
hrefs = all_options[1].get_attribute("href")
res = hrefs.encode('utf-8')
element = driver.execute_script('%s'%res)
WebDriverWait(driver, timeout=10).until(lambda x: x.find_element_by_id('ctl00_ctl00_ContentPlaceHolder1_ItemListPlaceHolder_itemslv_ctrl0_Counterlbl'))
print element,"Here should be the result"
我编辑了代码,并且通过终端从文件运行了此代码,我没有收到任何错误,但结果是没有。实际上我想在javascript执行后保存结果。请让我知道为什么结果是空的......
提前感谢...
要在单击后获得结果,只需调用适当的find_element_by*
方法。您可能需要selenium.webdriver.support.ui.WebDriverWait
等待结果加载。
相关文章:
- 使用javascript存储变量的最安全方式
- 使用会话Javascript存储数据
- 我应该在哪里用javascript存储我的窗口维度
- 使用 JavaScript 存储、更改和更新不透明度
- javascript存储函数的OOP方式
- 通过javascript存储cookie
- 使用JavaScript存储在数组中的用户输入
- javascript存储循环结果
- 在 Java 中使用 IE/Chrome HTML 渲染器或使用 JavaScript 存储文件
- 使用 JavaScript 存储、删除和重新应用类属性
- 页面刷新后的 Javascript 存储变量
- 将图像从HTML中的输入和使用javascript存储到mongodb中的集合中
- 如何使用javascript存储Excel文件
- 如何使用javascript存储然后从Parse中检索图像
- 使用javascript存储右键单击的单词
- JavaScript 存储在一起相似的值
- JavaScript 存储函数中的设置变量
- 如何使用 javascript 存储永久值以创建试用应用程序
- UIWebView和JavaScript:存储元素引用,然后稍后使用
- 我可以将javascript存储在本地存储对象中并运行它吗