Python搜寻器通过使用Selenium和PhantomJS获取DOM信息 - javascript

我使用Selenium和PhantomJS希望从使用javascript构建DOM的网站获取数据。

下面的简单代码可以工作,但是并不总是有效的。我的意思是,大多数时候它将返回一个未执行javascript的空网站。它很少会得到我想要的正确信息。

from selenium import webdriver
from bs4 import BeautifulSoup

url = 'http://mall.pchome.com.tw/prod/QAAO6V-A9006XI59'
driver = webdriver.PhantomJS
driver.get(url)

print(driver.page_source, file=open('output.html','w'))

soup = BeautifulSoup(driver.page_source,"html5lib")
print(soup.select('#MetaDescription'))

返回空字符串的可能性很高:

[<meta content="" id="MetaDescription" name="description"/>]

网站服务器是否不允许网络爬网程序?我该如何解决我的代码?

而且,我需要的所有信息都可以在<head><meta>标记中找到。
(如上图所示,数据的ID为MetaDescription

还是有什么更简单的方法来获取<head>标记中的数据?

参考方案

首先,driver = webdriver.PhantomJS不是在Python中初始化Selenium Webdriver的正确方法,而是将其替换为:

driver = webdriver.PhantomJS()

您所描述的症状类似于出现计时问题时的症状。 Add a wait等待想要的元素出现,然后再尝试获取页面源:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.PhantomJS()
driver.get(url)

# waiting for presence of an element
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#MetaDescription")))

print(driver.page_source, file=open('output.html','w'))

driver.close()

# further HTML parsing here

您可能还需要ignore SSL errors and set the SSL protocol to any。在某些情况下,pretending not be PhantomJS也有帮助。

Python Selenium:单击下拉菜单中的选项时可以更改值吗? - javascript

我正在使用python硒进行一些搜索。在我查询的一个网页上,搜索对话框允许我通过下拉菜单指定是否要搜索所有部分或特定部分。要选择哪个部分,该站点在弹出窗口中有一些单独的对话框,我可以单击一个部分,然后在内部为下拉菜单中的“此部分”选项分配选定部分的值。这是检查选择器时的外观: <select ...> <option id="se…

Selenium:如何使RemoteDriver始终附加到当前的浏览器选项卡? - javascript

我正在开发一个Windows应用程序,该应用程序可以通过语音命令操纵浏览器。我想适当地处理用户添加一些标签并根据需要更改所选标签的情况。事实证明,RemoteDriver仅与一个选项卡一起使用,并且可以通过提供选项卡手柄将焦点切换到另一个选项卡。但是我不知道如何获取选定的选项卡句柄并始终检查选定的选项卡是否已更改,或者是否存在始终与选定的选项卡一起使用的方法…

Selenium Web Driver访问Jquery中的Javascript全局变量 - javascript

我正在尝试使用Selenium在Python中运行功能测试,我想在某个页面上声明的Javascript中检索全局变量的值。通常,browser.execute_script("return globalVar;")可以正常工作,但是在$(document).ready(function(){中声明了该变量,Selenium无法找到它。因此…

Javascript-Python:将动态生成的图像提供给客户端浏览器? - php

场景:用户加载页面,正在生成图像,显示加载栏,通知事件已发送到浏览器。我正在使用python代码生成图像。拥有启动脚本或将Web服务器代码嵌入python脚本的Web服务器是否理想?图像完成渲染后,客户端应收到一条消息,说明图像成功并显示图像。如何设计它以同时支持并发用户?是否只需为每个导航到该网页的新用户启动python脚本就足够了?在这种情况下拥有实时W…

Selenium:在进行JavaScript调用时无需点击即可获得最终的href /链接 - javascript

我正在抓取一长串的html链接(在ToS下允许)。但是,所有链接都是javascript调用(href =“ javascript :;”),因此使用get_attribute()获取链接将不起作用。我不想实际单击所有链接,因为它会为每个链接下载一个较大的pdf文件是否有可能获得最终调用的href /链接,而无需实际单击链接并下载文件?谢谢! 参考方案 是的…