我正面对一个由ul和li元素组成的下拉菜单:
<ul class="o_dropdown_theme_values">
<li class="" tabindex="-1">
<label class="myclass" tabindex="0">Category 1</label>
</li>
<li class="" tabindex="-1">
<label class="myclass" tabindex="0">Category 2</label>
</li>
...
</ul>
Run Code Online (Sandbox Code Playgroud)
我知道使用Chromeless修改下拉菜单的两种方法:
.evaluate((dropDownValue) => {
select = document.querySelector('select#category1')
select.value = dropDownValue
}, dropDownValue)
Run Code Online (Sandbox Code Playgroud)
和
.click('#id')
.type("first letters of option", '#id')
.click('#id option[value="'+dropDownValue+'"]')
Run Code Online (Sandbox Code Playgroud)
但由于ul和li菜单的结构,我无法使用这些.
我还尝试单击菜单,然后根据需要多次按Tab键选择正确的选项,就像我用键盘导航菜单一样.但是我发送的Tab键不会被考虑在内.我能够向菜单发送一个(并且只有一个)DOWN键(而不是TAB),但仅此而已.
我怎么能操纵这种菜单?任何基于JavaScript的解决方法将不胜感激.
我使用Chromeless检索网站上的一条信息并加载相应的文件:
async function run() {
const chromeless = new Chromeless()
const screenshot = await chromeless
.goto('http://www.website.com')
title = await chromeless.inputValue('input[name="title"]')
var fs = require('fs');
var data = fs.readFileSync(title,"utf8");
...
await chromeless.end()
}
Run Code Online (Sandbox Code Playgroud)
但是当我启动脚本时,文件读取指令会立即执行,而不是等待Web爬行完成.
在javascript中,我认为我需要使用回调函数来防止这种情况,但有没有更好的方法来使用Chromeless?
我正在尝试使用CentOS 6在我的服务器上安装节点js包:
npm install chromeless
Run Code Online (Sandbox Code Playgroud)
但安装失败并显示以下消息:
/usr/lib/node_modules/npm/bin/npm-cli.js:79
let notifier = require('update-notifier')({pkg})
^^^^^^^^
SyntaxError: Unexpected identifier
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:945:3
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
我正在使用 NLTK 和 TextBlob 在文本中查找名词和名词短语:
from textblob import TextBlob
import nltk
blob = TextBlob(text)
print(blob.noun_phrases)
tokenized = nltk.word_tokenize(text)
nouns = [word for (word, pos) in nltk.pos_tag(tokenized) if is_noun(pos)]
print(nouns)
Run Code Online (Sandbox Code Playgroud)
如果我的文字是英文的,这很好用,但如果我的文字是法文,那就不行了。
我无法找到如何将此代码调整为法语,我该怎么做?
是否有可以解析的所有语言的列表?
我想使用特定的 css 路径获取 DOM 中的所有元素:
var elements = await chromeless.evaluate(() => document.querySelectorAll('div a'))
console.log(elements[0].innerHTML)
console.log(elements[1].innerHTML)
Run Code Online (Sandbox Code Playgroud)
但这段代码在第一行给了我错误“对象引用链太长”
这段代码可以工作:
var element = await chromeless.evaluate(() => document.querySelectorAll('div a')[0].innerHTML)
console.log(element)
Run Code Online (Sandbox Code Playgroud)
我可能会使用一个循环来检索它们,但我不知道我的 DOM 中有多少元素有这个 css,所以我不知道要循环多少次。
获取所有所需元素的正确语法是什么?
基于这篇文章,我试图找到一个命令来查找一个非常复杂的字符串中的所有主题标签字(以#开头的单词):
echo "Le #cerveau d’#Einstein n’est « #Ordre des #Mopses\" » pas" | sed -e 's/^/ /g' -e 's/ [^#][^ ]*//g' -e 's/^ *//g'
Run Code Online (Sandbox Code Playgroud)
不幸的是输出是:
#cerveau #Mopses"
Run Code Online (Sandbox Code Playgroud)
代替:
#cerveau #Einstein #Ordre #Mopses
Run Code Online (Sandbox Code Playgroud)
什么应该是正确的命令?
我有以下表格:
<form name="security_page_toplevel_page_itsec_settings" method="post" action="options.php">
<select id="itsec_strong_passwords_roll" name="itsec_strong_passwords[roll]">
<option value="admin">admin</option>
<option value="subscriber">subscriber</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
但我无法使用以下代码选择"订户"选项:
this.fillSelectors('form#security_page_toplevel_page_itsec_settings', {
'select[name="itsec_strong_passwords[roll]"]': 'subscriber'
}, true);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
chromeless ×4
javascript ×4
automation ×1
bash ×1
callback ×1
casperjs ×1
centos ×1
forms ×1
html-select ×1
linux ×1
nltk ×1
npm ×1
python ×1
regex ×1
sed ×1
textblob ×1