2016-06-22 8 views
2

セレンを使用しているWebサイトのソースコードを取得したいと思います。 BeautifulSoupを使って特定の要素を見つける。それをselenium.webdriver.remote.webelementオブジェクトとしてセレンに解析します。 このように:BeautifulSoup要素をSereniumに解析します。

driver.get("www.google.com") 
soup = BeautifulSoup(driver.source) 
element = soup.find(title="Search") 

element = Selenium.webelement(element) 
element.click() 

どうすればこの問題を解決できますか?

答えて

0

は私がセレンにBS4から渡すためにどのような方法を知りませんが、あなただけの要素を見つけるために、セレンを使用することができます。

driver.find_element_by_xpath('//input[@title="Search"]').click() 

またはあなたのBS4のようなだけのタイトルテキストが見つける使用して検索する:

driver.find_element_by_xpath('//*[@title="Search"]').click() 
0
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from bs4 import BeautifulSoup 

driver = webdriver.Chrome() 
driver.get("http://www.google.com") 
soup = BeautifulSoup(driver.page_source, 'html.parser') 
search_soup_element = soup.find(title="Search") 
input_element = soup.select('input.gsfi.lst-d-f')[0] 

search_box = driver.find_element(by='name', value=input_element.attrs['name']) 
search_box.send_keys('Hello World!') 
search_box.send_keys(Keys.RETURN) 

これはかなり作品。私はwebdriverとBeautifulSoupの両方で作業する理由を見ることができますが、この例では必ずしもそうではありません。

0

私のために働いた一般的な解決策は

xpath = xpath_soup(soup_element) 
selenium_element = driver.find_element_by_xpath(xpath) 

、セレンの要素を見つけるために、それを使用し、その後、the xpath of the bs4 elementを計算することである...

import itertools 

def xpath_soup(element): 
    """ 
    Generate xpath of soup element 
    :param element: bs4 text or node 
    :return: xpath as string 
    """ 
    components = [] 
    child = element if element.name else element.parent 
    for parent in child.parents: 
     """ 
     @type parent: bs4.element.Tag 
     """ 
     previous = itertools.islice(parent.children, 0, parent.contents.index(child)) 
     xpath_tag = child.name 
     xpath_index = sum(1 for i in previous if i.name == xpath_tag) + 1 
     components.append(xpath_tag if xpath_index == 1 else '%s[%d]' % (xpath_tag, xpath_index)) 
     child = parent 
    components.reverse() 
    return '/%s' % '/'.join(components) 
関連する問題