我面临一个奇怪的问题。我正在尝试解析以下html:
问题是当我这样做
response.xpath('//div//section//div[@id="hiring-candidate-app"]')[0].extract()
我只能得到
'<div id="hiring-candidate-app"></div>'
代替hiring-candidate-app
下的所有内容。
例如,我想获取inside-content
,但看起来我什至没有得到答复。我必须登录此网页。
谢谢!
答案 0 :(得分:0)
您的Xpath似乎抓住了正确的东西。但是您的问题可能与呼叫的[0]部分有关。我将其删除以获取div的全部内容。
答案 1 :(得分:0)
看起来有问题的元素位于<iframe>
上,因此存在于不同的上下文中。您需要激活或切换到iframe的上下文,例如。使用JavaScript与iframe及其内部的文档进行交互,例如
//Note: Assigning document.domain is forbidden for sandboxed iframes, i.e. on stacksnippets
//document.domain = "https://stacksnippets.net";
var ifrm = document.getElementById("myFrame");
// reference to iframe's window
//var win = ifrm.contentWindow;
// reference to document in iframe
var doc = ifrm.contentDocument ? ifrm.contentDocument : ifrm.contentWindow.document;
// reference an element via css selector in iframe
//var form = doc.getElementById('body > div > div.message');
// reference an element via xpat in iframe
var xpathResult = doc.evaluate("/html/body/div/div[1]", doc, null, XPathResult.ANY_TYPE, null);
<iframe id="myFrame" src="https://stacksnippets.net" style="height:380px;width:100%"></iframe>
但是,正如您看到的那样,在运行摘要后,跨文档交互仅在文档具有相同来源的情况下才可行。还有其他更复杂的方法,例如postMessage方法,提供了交互跨域的方法。