Не могу нажать на первое предложение или первое значение - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь почистить данные с сайта

http://www.lacoteimmo.com/prix-de-l-immo/location/pays/france.htm#/.

Я изо всех сил пытаюсь нажать на первое предложение. Мне удалось этот код, как показано ниже:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import time
import csv
import unittest
import sys
import datetime
import os.path
import pandas as pd

from geopy.geocoders import GoogleV3
from datetime import datetime
from selenium import webdriver
from bs4 import NavigableString
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
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import WebDriverException
from bs4 import BeautifulSoup
from bs4.element import Tag
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.remote.errorhandler import ErrorHandler

def main(self):
CITIES = ["La Rochelle"]
self.driver = webdriver.Chrome()
driver=self.driver
ID=1
for city in CITIES:
print str(city) +" , "+str(ID)
ID+=1
try:
driver.get("http://www.lacoteimmo.com/prix-de-l-immo/location/pays/france.htm#/")
driver.implicitly_wait(30) 
driver.find_element_by_css_selector("#mapAutosuggest").send_keys(city) # Enter city
# Wait until autosuggestion come and click on first suggestion
condition = EC.visibility_of_element_located((By.CSS_SELECTOR, '#mapAutosuggest + span > span:nth-child(1)'))
WebDriverWait(driver, 5).until(condition).click()
driver.implicitly_wait(50) 
except NoSuchElementException: #spelling error making this code not work as expected
pass
self.driver.quit()

Ответы [ 2 ]

0 голосов
/ 25 июня 2018
import time
from geopy.geocoders import GoogleV3
from datetime import datetime
from selenium import webdriver
from bs4 import NavigableString
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
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import WebDriverException
from bs4 import BeautifulSoup
from bs4.element import Tag
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.remote.errorhandler import ErrorHandler
from selenium.webdriver.chrome.options import Options

CITIES = ["La Rochelle"]
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
# chrome_options.add_argument("--headless")

driver = webdriver.Chrome(
    executable_path='chrome_driver_path'
    , chrome_options=chrome_options
)

ID=1
for city in CITIES:
    print(str(city) + " , " +str(ID))
    ID+=1

try:
    driver.get("http://www.lacoteimmo.com/prix-de-l-immo/location/pays/france.htm#/")
    driver.implicitly_wait(30) 
    driver.find_element_by_css_selector("#mapAutosuggest").send_keys(city) # Enter city
    # Wait until autosuggestion come and click on first suggestion
    condition = EC.visibility_of_element_located((By.CSS_SELECTOR, '.slam-aui-results > span:nth-child(1)'))
    WebDriverWait(driver, 5).until(condition)
    firstResult = driver.find_element_by_css_selector(".slam-aui-results > span:nth-child(1)")
    firstResult.click()
    time.sleep(10)
    driver.implicitly_wait(50) 
except NoSuchElementException: #spelling error making this code not work as expected
    pass
driver.quit()
0 голосов
/ 25 июня 2018

После того, как вы отправите последовательность символов La Rochelle рядом, чтобы щелкнуть первое предложение, вы должны заставить WebDriverWait , чтобы элемент был кликабельным , и вы можетеиспользуйте следующее решение:

  • Блок кода:

    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
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("http://www.lacoteimmo.com/prix-de-l-immo/location/pays/france.htm#/")
    driver.find_element_by_css_selector("#mapAutosuggest").send_keys("La Rochelle") # Enter city
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.slam-aui-results>span.slam-aui-results-line.focus"))).click()
    
  • Снимок браузера:

La Rochelle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...