我只是开始研究 Selenium ,这很棒,但是,我想编写一个脚本,该脚本将使用ELinks浏览网页。
使用Se webdriver,我可以执行以下操作:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#Open firefox
br=webdriver.Firefox()
#open website
br.get('http://python.org')
#check if website title contains word
assert 'Python' in br.title
elem=br.find_element_by_name('q')
elem.send_keys('selenium')
elem.send_keys(Keys.RETURN)
assert 'Google' in br.title
br.close()
但是如何使用Elinks在python中执行类似的任务呢? (或者有可能吗?)
最佳答案
elinks真的很快。您可以使用Lua脚本语言automate elinks。他们的文档中有example scripts。您也可以尝试pexpect,这是在python中自动执行终端应用程序的一种非常不错的方法。以下脚本使用pexpect与问题中的示例执行相同的任务。它将访问python.org,搜索 Selenium ,将搜索结果保存到文件中,然后退出elinks。
from pexpect import spawn
import time
import datetime
KEY_UP = '\x1b[A'
KEY_DOWN = '\x1b[B'
KEY_RIGHT = '\x1b[C'
KEY_LEFT = '\x1b[D'
KEY_ESCAPE = '\x1b'
KEY_BACKSPACE = '\x7f'
child = spawn('elinks http://python.org')
print 'waiting for python.org to load'
child.expect('Python')
time.sleep(0.1)
print 'doing selenium search'
child.sendline('/advanced search')
child.sendline(KEY_UP * 2)
child.sendline('selenium')
child.sendline('')
print 'waiting for search results'
child.expect('Google Search')
time.sleep(0.1)
print 'saving html'
child.send(KEY_ESCAPE) # bring up menu
child.send(KEY_DOWN + 's') # select save as in menu
child.send(KEY_BACKSPACE * 100) # remove any file name already in input box
file = './saved_' + datetime.datetime.now().strftime('%H%M%S') + '.html'
child.sendline(file)
#child.interact() #uncomment to interact with elinks, good for debugging
print 'quiting'
child.sendline('q')
child.wait()