Как эмулировать поведение phantomjs с помощью chromedriver и chrome, чтобы получить все ссылки на странице, используя Selenium через Python и contextlib - PullRequest
0 голосов
/ 02 июня 2019

Некоторые веб-страницы, с которыми я сталкиваюсь, имеют ссылки, сгенерированные из кода javascript, и я могу получить к ним доступ только с помощью phantomjs согласно приведенному ниже коду.

 dcap = dict(DesiredCapabilities.PHANTOMJS)
        dcap["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166"
        driverpjs = webdriver.PhantomJS("/Users/xx/Downloads/phantomjs-2.1.1-macosx/bin/phantomjs",desired_capabilities=dcap)

with contextlib.closing(driverpjs) as browser:
                browser.get(link)
                links = browser.find_elements_by_xpath('.//a')

Как мне сделать это с Chrome? Прямо сейчас я пробую ниже:

options = webdriver.ChromeOptions()
        options.add_argument("headless")
    options.add_argument('--user-agent="Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166"')
        driver =  webdriver.Chrome(executable_path="/usr/local/bin/chromedriver", chrome_options=options)

with contextlib.closing(driver) as browser:
                browser.get(link)

                # GET ALL LINKS                                                                                                                                                                                                           
                #links = browser.find_elements_by_css_selector("a")                                                                                                                                                                       
                links = browser.find_elements_by_xpath('.//a')

1 Ответ

0 голосов
/ 03 июня 2019

Чтобы получить все ссылки на странице, эмулирующие аналогичные функции PhantomJS с Chrome с использованием contextlib, вы можете использовать следующее решение:

  • Кодовый блок:

    from contextlib import closing
    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_argument("headless")
    options.add_argument('--user-agent="Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 640 XL LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10166"')
    driver =  webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe', chrome_options=options)
    
    with closing(driver) as browser:
        browser.get("https://www.google.com/")
        # get all the elements with name as q                                                                                                                                                                                                          
        print(browser.find_elements_by_name('q'))
    
  • Выход на консоль:

    [<selenium.webdriver.remote.webelement.WebElement (session="ab581b3b679b521ffa5bf2220f801fcf", element="0.39081088826075705-1")>]   
    
...