我正在尝试从文件查找器页面(example)中抓取Github存储库中的所有文件路径。
Beautiful Soup 4无法抓取包装文件路径列表的<tbody class="js-tree-finder-results js-navigation-container js-active-navigation-container">
元素。我认为这是b / c bs4无法刮掉动态内容,所以我试着用Selenium等待所有元素加载:
driver = webdriver.PhantomJS()
driver.get("https://github.com/chrisspen/weka/find/master")
# Explicitly wait for the element to become present
wait = WebDriverWait(driver, 10)
element = wait.until(
EC.presence_of_element_located((
By.CSS_SELECTOR, "js-tree-finder-results.js-navigation-container.js-active-navigation-container"
))
)
# Pass the found element into the script
items = driver.execute_script('return arguments[0].innerHTML;', element)
print(items)
但它仍未能找到元素。
我做错了什么?
P.S。
可以使用以下脚本通过JS控制台轻松获取文件路径:
window.onload = function() {
var fileLinks = document.getElementsByClassName("css-truncate-target js-navigation-open js-tree-finder-path");
var files = [];
for (var i = 0; i < fileLinks.length; i++) {
files.push(fileLinks[i].innerHTML);
}
return files;
}
修改
我的程序需要使用无头浏览器,例如PhantomJS。
答案 0 :(得分:0)
由于Github的Content-Security-Policy设置,当前版本的PhantomJS无法捕获Github内容。这是一个已知的错误并记录在案here。根据该问题页面,降级到PhantomJS版本1.9.8是解决问题的方法。
另一个解决方案是使用chromedriver:
driver = webdriver.Chrome('chromedriver')
driver.get("https://github.com/chrisspen/weka/find/master")
wait = WebDriverWait(driver, 10)
element = wait.until(
EC.presence_of_element_located((
By.CLASS_NAME, "js-tree-finder-path"
))
)