如何克服Javascript的“ onclick”按钮来抓取网页?
我必须按下一个按钮才能读取网页上的资金信息。否则,视图将被阻塞,并且使用刮板外壳始终会导致为空[]。
<div onclick="AgreeClick()" style="width:200px; padding:8px; border:1px black solid; background-color:#cccccc; cursor:pointer;">Confirmed</div>
而且AgreeClick的功能是:
function AgreeClick() {var cookieKey = "ListFundShowDisclaimer";
SetCookie(cookieKey, "true", null);
Get("disclaimerDiv").style.display = "none";
Get("blankDiv").style.display = "none";
Get("screenDiv").style.display = "none";
//Get("contentTable").style.display = "block";
ShowDropDown();
如何克服此onclick =“ AgreeClick()”函数来抓取网页?
回答:
首先,检查所需的数据是否已经存在-在html中(它在背景中-在那里)。
另一种选择是selenium::
from selenium import webdriverimport time
browser = webdriver.Firefox()
browser.get("http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U")
elem = browser.find_element_by_xpath('//*[@id="disclaimer"]/div/div')
elem.click()
time.sleep(0.2)
elem = browser.find_element_by_xpath("//*")
print elem.get_attribute("outerHTML")
另一种选择是使用mechanize
。它无法执行js代码,但是根据源代码,AgreeClick
只需将cookie
设置为ListFundShowDisclaimer
即可true
。这是一个起点(不确定是否可行):
import cookielibimport mechanize
br = mechanize.Browser()
cj = cookielib.CookieJar()
ck = cookielib.Cookie(version=0, name='ListFundShowDisclaimer', value='true', port=None, port_specified=False,
domain='www.prudential.com.hk', domain_specified=False, domain_initial_dot=False, path='/',
path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None,
rest={'HttpOnly': None}, rfc2109=False)
cj.set_cookie(ck)
br.set_cookiejar(cj)
br.open("http://www.prudential.com.hk/PruServlet?module=fund&purpose=searchHistFund&fundCd=MMFU_U")
print br.response().read()
然后,你可以使用BeautifulSoup
或任何你喜欢的内容解析结果。
以上是 如何克服Javascript的“ onclick”按钮来抓取网页? 的全部内容, 来源链接: utcz.com/qa/422089.html