我正在使用String argument = this.getArguments().getString("category");
抓取网页。这是初始设置:
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragList = new ArrayList<>();
private final List<String> titleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragList.get(position);;
}
public void addFragment(Fragment fragment, String title) {
fragList.add(fragment);
titleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
@Override
public int getCount() {
return fragList.size();
}
到目前为止,一切正常。能够成功确定phantom 6.0.3
的长度为(async function () {
const instance = await phantom.create(['--ignore-ssl-errors=yes', '--load-images=no', '--web-security=false'], {logLevel: 'error'});
const page = await instance.createPage();
await page.on('onResourceRequested', function (requestData) {
console.info('Requesting', requestData.url);
});
const url = // Some url
const status = await page.open(url);
const content = await page.evaluate(function () {
return document.querySelector('ul > li');
});
const contentLength = content.length // 5
//Code Block 2 goes here
})();
(有5个content
项目)。因此,我现在要做的就是获取每个5
元素中的li
……这就是我要解决的问题。
我尝试使用innerText
来检索每个li
元素的for loop
,但是它总是返回innerText
。这是我尝试过的:
li
我不知道发生了什么。我可以指定要返回的特定索引,例如:null
,这将为我提供正确的//Code Block 2:
for (let i = 0; i < contentLength; i++) {
const info = await page.evaluate(function () {
const element = document.querySelector('ul > li');
return element[i].innerText;
});
console.log(info); // this returns null 5 times
}
,但是我无法通过return element[3].innerText
答案 0 :(得分:3)
PhantomJS在不同的上下文中评估函数,因此它不知道参数i
。
您应将i
传递给评估函数,以便将其转发到浏览器进程:
for (let i = 0; i < contentLength; i++) {
const info = await page.evaluate(function (index) { // notice index argument
const element = document.querySelector('ul > li');
return element[index].innerText;
}, i); // notice second argument is i
console.log(info);
}