__init __()需要2个位置参数,但是给出了3个,这是关于网络爬虫的错误

时间:2016-10-21 08:41:51

标签: python-3.x selenium web-crawler selenium-chromedriver

最近,我想制作一个网络爬虫,我是编程的新手。我知道这个错误在stackoverflow.com中很常见,但我研究并尝试了数百万次。它仍然失败了。 下面是我的代码,它是半成品。

import requests
import time

from bs4 import BeautifulSoup
from selenium import webdriver


from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait



chrome_path = "C:\Program Files\Anaconda3\Scripts\chromedriver.exe" 
web = webdriver.Chrome(chrome_path)

web.get('https://www.agoda.com/zh-tw/pages/agoda/default/DestinationSearchResult.aspx?asq=%2bZePx52sg5H8gZw3pGCybdmU7lFjoXS%2baxz%2bUoF4%2bbAP7QU5sGtWmrzIvlWpeSVhG7hBqSW0J1d8hA8mgoocSdtpIj66gXToDH6PLoebpS2%2b7zRXCrzWTxWGJcCS2%2b98%2bkomkepA8A1QWe2FGYglfZpxj%2fA%2bylTfAGs1qJCjm9nxgYafyEWBFMPjt2sg351B&city=18343&tick=636125544363&isdym=true&searchterm=%E5%A2%BE%E4%B8%81&pagetypeid=1&origin=TW&cid=-1&htmlLanguage=zh-tw&checkIn=2016-10-25&checkOut=2016-10-26&los=1&rooms=1&adults=2&children=0&isFromSearchBox=true&ckuid=db61c7c8-1cf8-4b14-9c04-9c8aababbac5')


soup=BeautifulSoup(web.page_source,"lxml")

#wait=ui.WebDriverWait(web,10)

a=1

hotelname=web.find_elements_by_class_name("hotel-name")

try:    
    while len(soup.select('.btn-right')) >0:
        print("page",a)
        a=a+1

        for number,name in enumerate(hotelname):
            print(number,name.text.strip())
            #time.sleep(1)


        if len(soup.select('.btn-right'))>0 :
            web.find_element_by_id("paginationNext").click()
            soup=BeautifulSoup(web.page_source,"lxml")
            hotelname=web.find_elements_by_class_name("hotel-name")
        else:
            break

    web.close()
except:
    time.sleep(3)
    print("wake up")
    WebDriverWait(web,10).until(EC.element_to_be_clickable(By.XPATH,"//button[@data-selenium='pagination-next-btn']"))
    web.find_element_by_id("paginationNext").click()
    print("click ok")

当我运行此代码时,收到错误消息:

文件“C:/Users/Elvis/.spyder-py3/driver2.py”,第77行,     WebDriverWait(网页,10)。直到(EC.element_to_be_clickable(By.CLASS_NAME, “分页-下一BTN”)) TypeError:__ init __()需要2个位置参数,但有3个被赋予

我猜这行中有一个错误

WebDriverWait(web,10).until(EC.element_to_be_clickable(By.XPATH,"//button[@data-selenium='pagination-next-btn']"))

我只想检查此按钮是否可点击,或等待10秒钟。 我尝试调整路径和标记很多次,但不起作用。 顺便说一句,我使用python3,win10和chromedriver。 如果您有任何想法,请帮助我,我真的想解决这个问题,并完成我的第一个网络爬虫。 谢谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

你应该向#{1}}提供args元组,而不是两个单独的args element_to_be_clickable((locator type, locator))

element_to_be_clickable(locator type, locator)