Selenium Python错误对象没有属性' create_driver'
我有一个名为search_controller.py
的文件。 错误。我希望该文件打开Firefox浏览器并搜索传递给它的查询。
错误:
attributeError:'searchController'对象没有属性'create_driver'
是代码:
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import FirefoxProfile, ChromeOptions
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from time import sleep
from webdriver_setup import get_webdriver_for
from config import logger
from translations import contains_ad
class SearchController:
URL = "https://www.google.com"
SEARCH_INPUT = (By.NAME, "q")
def __init__(self, query, browser="firefox", ad_visit_time=4):
self._search_query = query
self._ad_visit_time = ad_visit_time
self._driver = self._create_driver(browser.lower())
self._load()
def search_for_ads(self):
"""
:Start search for the given query and return ads if any
:rtype: list
:returns: List of (ad, ad_link) tuples
"""
logger.info(f"Starting search for '{self._search_query}'")
search_input_box = self._driver.find_element(*self.SEARCH_INPUT)
search_input_box.send_keys(self._search_query, Keys.ENTER)
ad_links = []
try:
wait = WebDriverWait(self._driver, timeout=10)
results_loaded = wait.until(EC.presence_of_element_located((By.ID, "result-stats")))
if results_loaded:
logger.info("Getting ad links...")
ad_links = self._get_ad_links()
except TimeoutException:
logger.error("Timed out waiting for results!")
self.end_search()
return ad_links
def click_ads(self, ads):
"""
:Click ads found
:type ads: list
:param ads: List of (ad, ad_link) tuples
"""
# store the ID of the original window
original_window_handle = self._driver.current_window_handle
for ad in ads:
ad_link_element = ad[0]
ad_link = ad[1]
logger.info(f"Clicking {ad_link}...")
# open link in a different tab
ad_link_element.send_keys(Keys.CONTROL + Keys.RETURN)
for window_handle in self._driver.window_handles:
if window_handle != original_window_handle:
self._driver.switch_to.window(window_handle)
sleep(self._ad_visit_time)
self._driver.close()
break
# go back to original window
self._driver.switch_to.window(original_window_handle)
sleep(1)
# scroll the page to avoid elements remain outside of the view
self._driver.execute_script("arguments[0].scrollIntoView(true);", ad_link_element)
def end_search(self):
"""Close the browser"""
self._driver.quit()
通过cli运行时会遇到的错误:错误
$ python3 ad_clicker.py -q "123"
Traceback (most recent call last):
File "/home/slycooper/Documents/Coding/Ad_clicker/search_controller.py", line 28, in __init__
self._driver = self.create_driver(browser.lower())
AttributeError: 'SearchController' object has no attribute 'create_driver'
I have a file named search_controller.py
.When I run the search_controller.py
file am getting
an error.I want the file to open up firefox browser and search the query passed to it.
The error:
AttributeError: 'SearchController' object has no attribute 'create_driver'
Below is the code:
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import FirefoxProfile, ChromeOptions
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from time import sleep
from webdriver_setup import get_webdriver_for
from config import logger
from translations import contains_ad
class SearchController:
URL = "https://www.google.com"
SEARCH_INPUT = (By.NAME, "q")
def __init__(self, query, browser="firefox", ad_visit_time=4):
self._search_query = query
self._ad_visit_time = ad_visit_time
self._driver = self._create_driver(browser.lower())
self._load()
def search_for_ads(self):
"""
:Start search for the given query and return ads if any
:rtype: list
:returns: List of (ad, ad_link) tuples
"""
logger.info(f"Starting search for '{self._search_query}'")
search_input_box = self._driver.find_element(*self.SEARCH_INPUT)
search_input_box.send_keys(self._search_query, Keys.ENTER)
ad_links = []
try:
wait = WebDriverWait(self._driver, timeout=10)
results_loaded = wait.until(EC.presence_of_element_located((By.ID, "result-stats")))
if results_loaded:
logger.info("Getting ad links...")
ad_links = self._get_ad_links()
except TimeoutException:
logger.error("Timed out waiting for results!")
self.end_search()
return ad_links
def click_ads(self, ads):
"""
:Click ads found
:type ads: list
:param ads: List of (ad, ad_link) tuples
"""
# store the ID of the original window
original_window_handle = self._driver.current_window_handle
for ad in ads:
ad_link_element = ad[0]
ad_link = ad[1]
logger.info(f"Clicking {ad_link}...")
# open link in a different tab
ad_link_element.send_keys(Keys.CONTROL + Keys.RETURN)
for window_handle in self._driver.window_handles:
if window_handle != original_window_handle:
self._driver.switch_to.window(window_handle)
sleep(self._ad_visit_time)
self._driver.close()
break
# go back to original window
self._driver.switch_to.window(original_window_handle)
sleep(1)
# scroll the page to avoid elements remain outside of the view
self._driver.execute_script("arguments[0].scrollIntoView(true);", ad_link_element)
def end_search(self):
"""Close the browser"""
self._driver.quit()
Error I get when I run it via CLI:
$ python3 ad_clicker.py -q "123"
Traceback (most recent call last):
File "/home/slycooper/Documents/Coding/Ad_clicker/search_controller.py", line 28, in __init__
self._driver = self.create_driver(browser.lower())
AttributeError: 'SearchController' object has no attribute 'create_driver'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论