在python中使用selenium执行javascript后存储结果
我正在尝试使用selenium在锚定标记内执行javascript函数,并尝试将结果存储到某个地方 HTML代码:在python中使用selenium执行javascript后存储结果,javascript,python,selenium,Javascript,Python,Selenium,我正在尝试使用selenium在锚定标记内执行javascript函数,并尝试将结果存储到某个地方 HTML代码: <td> <td> <ul class="compare"> <li class="floatRight dividLineLeft category_page_navigation"> <div class="page_navigation"> <span id="c
<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']")
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"
在这里,我可以从锚标签中获取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执行后保存结果。请告诉我为什么结果为空
提前感谢………..要在单击后获得结果,只需调用适当的
find\u element\u by*
方法。您可能需要selenium.webdriver.support.ui.WebDriverWait
等待加载结果。单击链接时,您在浏览器中看到了什么?你期望得到什么结果?例如,如果javascript更改了文档,则只需像往常一样查询DOM即可获得结果。我们可以通过firebug中查看javascript的方式获得结果,但我希望通过selenium获得结果,正如您在url“”上方看到的那样,我实际上想实现分页,但这是通过javascript函数完成的,因此,当我们动态地点击下一页时,数据会加载到页面上,而不会更改url,因此我想使用selenium并了解(捕获结果)当我们点击分页时会发生什么,我的意思是存储javascript功能的结果,可能是url或其他什么,如果我的解释有错误,请让我知道谢谢,这很有用,如果你不介意,请你在我上面编辑的代码中展示一下,打印结果“元素”,你能给我举个例子吗,这样会更有帮助。提前感谢@J.F.Sebastian:这有一些帮助,对不起,在上面提到的示例中,intesnion是保存javascript执行生成的url,但是在那里会打印整个页面源代码,页面源代码的url如何(我需要的正是)。在我的示例中,正如u所指出的,我能够执行javascript函数并将页面从1移动到2(尝试实现分页),这里我想找到第二个页面的url。我们如何才能做到这一点与上述example@shivakrishna:您在回答的注释中提到的URL是相同的(不会更改)。看起来“结果”是JavaScript改变了你已经在上面的页面,也就是说,它不返回任何URL。如果你不需要完整页面的源代码,那么你可以使用find_element_by*()
来获取感兴趣的位。是的,你是对的,url不会动态地更改页面上的值,但是在分页的情况下如何解决这个问题,我的意思是,有没有办法在上述url中实现分页?
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"