【问题标题】:How to call a method inside selenium function如何在 selenium 函数中调用方法
【发布时间】:2020-07-23 20:52:33
【问题描述】:

在过去的几天里,我使用 selenium 构建了一个非常简单的 python webscraper,它可以抓取某个汽车列表网站并收集有关特定品牌和型号汽车的列表数据。但是,我在引用 selenium 方法中的方法时遇到了问题。

class crawler:
    def __init__(self, make, model):
        self.car_make = make
        self.car_model = model
        self.driver = webdriver.Chrome('C:/Users/ecc/Downloads/chromedriver/chromedriver.exe')
        self.driver.get("car-listing-website")
        sleep(2)
        self.driver.find_element_by_xpath("//select[@id='carPickerUsed_makerSelect']").click()
        sleep(1)
        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_make}]").click()
        self.driver.find_element_by_xpath("//select[@id='carPickerUsed_modelSelect']").click()
        sleep(1)
        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_model})]").click()

我遇到的问题是在最后几行代码中引用了 self.car_make 和 self.car_model 值:

        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_make}]").click()
        self.driver.find_element_by_xpath("//select[@id='carPickerUsed_modelSelect']").click()
        sleep(1)
        self.driver.find_element_by_xpath("//option[contains(text(), {self.car_model})]").click()

运行后,它说这些不是有效的 Xpath 表达式。我想我的问题是,这甚至可以在硒中完成吗?如果是这样,只是语法错误的问题吗?

就上下文而言,目标是能够使用 crawler() 实例来抓取网站上任何类型的品牌和型号,而无需手动更新代码来搜索那些不同的品牌和型号。例如,理想情况下,您可以使用以下代码获取 Ford Mustangs 的列表数据:

crawler('Ford','Mustang')

【问题讨论】:

    标签: python selenium web-scraping automation webdriver


    【解决方案1】:

    好吧,我对硒不是很有经验,但不妨试试这个:

    self.driver.find_element_by_xpath(f"//option[contains(text(), '{self.car_make}')]").click()  
    

    或者这个:

    self.driver.find_element_by_xpath(f"//option[text()='{self.car_make}')]").click() 
    

    如果没有,请尝试分享您遇到问题的 Html。

    【讨论】:

    • 你也可以使用显式等待来代替 time.sleep()。
    • 感谢您的回复。我最终想出了一个解决方案。我使用 format() 方法在 Xpath 字符串之后传入 self.car_make 和 self.car_model 的值。成功了
    猜你喜欢
    • 1970-01-01
    • 2014-02-17
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多