首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Selenium的Firefox (无头)

带Selenium的Firefox (无头)
EN

Stack Overflow用户
提问于 2016-02-13 16:22:13
回答 3查看 2K关注 0票数 6

如何使用seleniumfirefox来抓取网站?

安装Firefox,xvfb,selenium

代码语言:javascript
复制
echo "deb http://packages.linuxmint.com debian import" >> /etc/apt/sources.list && apt-get update
apt-get install firefox xvfb python-dev python-pip
pip install pyvirtualdisplay selenium

selenium_scrape.py

代码语言:javascript
复制
from pyvirtualdisplay import Display
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

display = Display(visible=0, size=(800, 600))
display.start()

def init_driver():
    driver = webdriver.Firefox()
    driver.wait = WebDriverWait(driver, 5)
    return driver

def lookup(driver, query):
    driver.get("http://www.google.com")
    try:
    box = driver.wait.until(EC.presence_of_element_located(
        (By.NAME, "q")))
    button = driver.wait.until(EC.element_to_be_clickable(
        (By.NAME, "btnK")))
    box.send_keys(query)
button.click()
    except TimeoutException:
        print("Box or Button not found in google.com")

if __name__ == "__main__":
    driver = init_driver()
    lookup(driver, "Selenium")
    time.sleep(5)
    driver.quit()

display.stop()

错误

代码语言:javascript
复制
  File "selenium_scrape.py", line 20
    box = driver.wait.until(EC.presence_of_element_located(
      ^
IndentationError: expected an indented block
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-21 21:20:11

问题(目前)是关于缩进错误。这一点可以很容易地解决:

代码语言:javascript
复制
def lookup(driver, query):
    driver.get("http://www.google.com")
    try:
        box = driver.wait.until(EC.presence_of_element_located(
            (By.NAME, "q")))
        button = driver.wait.until(EC.element_to_be_clickable(
            (By.NAME, "btnK")))
        box.send_keys(query)
        button.click()
    except TimeoutException:
        print("Box or Button not found in google.com")
票数 0
EN

Stack Overflow用户

发布于 2016-02-15 19:00:14

区别在于您不能使用打包的Chrome浏览器;您需要一个特殊的驱动程序.显色剂。

在这里获得当前的最新版本:显色剂

现在您有两个选项,要么移动下载的chromedriver,使其始终是可访问的(选项1),要么在脚本中定义如何访问它。

选项1:将其移动到路径中

然后移动它,以便当您使用webdriver.Chrome()时可以访问它。

代码语言:javascript
复制
sudo mv /path/to/download/chromedriver /usr/bin

还将其设置为允许执行:

代码语言:javascript
复制
chmod a+x /usr/binchromedriver

选项2:不要将其移动到路径中

或者你可以定义一条路径

代码语言:javascript
复制
import os
chr = "/Users/you/Downloads/chromedriver"
os.environ["webdriver.chrome.driver"] = chr
driver = webdriver.Chrome(chromedriver)
票数 4
EN

Stack Overflow用户

发布于 2016-02-15 22:09:34

(注意:最初的问题是关于Chrome的,所以我的答案是关于Chrome,而不是Firefox)。

对我来说,如果我只是将chromedriver解压缩到脚本所在的同一个文件夹中,它就能工作。

然后我就像这样运行

代码语言:javascript
复制
Xvfb :99 -ac -screen 0 1280x1024x16 &
echo 'Starting the test'
PATH=$PATH:. python selenimum_scrape.py

这将启动Xvfb并将cromedriver包含到PATH中。

修改后的版本对我有用:

代码语言:javascript
复制
import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

# comment this out to run on the real display
os.environ['DISPLAY'] = ':99'

def init_driver():
    driver = webdriver.Chrome()
    driver.wait = WebDriverWait(driver, 5)
    return driver

def lookup(driver, query):
    driver.get("http://www.google.com")
    try:
        box = driver.wait.until(EC.presence_of_element_located(
            (By.NAME, "q")))
        # once we type the query, this button disappears
        # button = driver.wait.until(EC.element_to_be_clickable(
        #     (By.NAME, "btnK")))
        box.send_keys(query)
        button = driver.wait.until(EC.element_to_be_clickable(
            (By.NAME, "btnG")))
        button.click()
    except TimeoutException:
        print("Box or Button not found in google.com")

if __name__ == "__main__":
    driver = init_driver()
    lookup(driver, "Selenium")
    time.sleep(5)
    driver.quit()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35382258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档