如何在python/selenium中切换iframe?
我一直在尝试从以下方面捕获数据: 我能够识别几个帧:如何在python/selenium中切换iframe?,python,selenium,iframe,Python,Selenium,Iframe,我一直在尝试从以下方面捕获数据: 我能够识别几个帧: SCROLL_PAUSE_TIME = 2 CYCLES=2 browser = webdriver.Firefox(firefox_options=opt) browser.get(pge) sleep(1) comment_button = browser.find_elements_by_class_name('Ob2kfd') sleep(1) comment_button[0].click() sleep(1) html = b
SCROLL_PAUSE_TIME = 2
CYCLES=2
browser = webdriver.Firefox(firefox_options=opt)
browser.get(pge)
sleep(1)
comment_button = browser.find_elements_by_class_name('Ob2kfd')
sleep(1)
comment_button[0].click()
sleep(1)
html = browser.find_element_by_tag_name('html')
frames = browser.find_elements_by_tag_name('iframe')
这将查找以下帧:
[<selenium.webdriver.remote.webelement.WebElement
(session="bbe62090fb83ba8774d855278b17b007", element="0.46172414237768167-
3")>,
<selenium.webdriver.remote.webelement.WebElement
(session="bbe62090fb83ba8774d855278b17b007", element="0.46172414237768167-
4")>,
<selenium.webdriver.remote.webelement.WebElement
(session="bbe62090fb83ba8774d855278b17b007",
element="0.46172414237768167-5")>,
<selenium.webdriver.remote.webelement.WebElement
(session="bbe62090fb83ba8774d855278b17b007",
element="0.46172414237768167-6")>,
<selenium.webdriver.remote.webelement.WebElement
(session="bbe62090fb83ba8774d855278b17b007",
element="0.46172414237768167-7")>,
<selenium.webdriver.remote.webelement.WebElement
(session="bbe62090fb83ba8774d855278b17b007",
element="0.46172414237768167-8")>]
我还尝试使用浏览器查找帧ID,但我不熟悉这一点:
browser.switch_to.frame("gci_91f30755d6a6b787dcc2a4062e6e9824.js")
我想基本上向下滚动评论,但我似乎陷入了错误的框架中:
sleep(2)
for i in range(CYCLES):
html.send_keys(Keys.DOWN)
time.sleep(SCROLL_PAUSE_TIME)
但什么都不管用
请注意,这不是一个重复,我很感激有一些类似的问题,但我真的尝试了所有提到的方法,似乎没有任何工作!如果有人能帮上忙,我将不胜感激。如果您可以从页面链接尝试,它似乎不起作用。元素不在任何
iframe
中。请尝试使用webdriverwait
和css选择器。在这里,我尝试了chrome,效果很好。打印文本127谷歌评论
就是您需要的
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.google.com/search?rlz=1C1GCEU_en__835__835&ei=gfW0XKjNFeXjkgW8g6PYDA&q=huawei%20stores%20italy&oq=huawei+stores+italy&gs_l=psy-ab.3..0i22i30l3.4596.6067..6522...1.0..0.99.530.7......0....1..gws-wiz.......0i71j0i20i263j0i67j0j33i160.QYVpoia0BL4&npsic=0&rflfq=1&rlha=0&rllag=45499827,9211657,4837&tbm=lcl&rldimm=17275164572016510107&lqi=ChNodWF3ZWkgc3RvcmVzIGl0YWx5IgOIAQFaDwoNaHVhd2VpIHN0b3Jlcw&ved=2ahUKEwiKrMm8g9PhAhXQ4KQKHY9KDc8QvS4wAXoECAoQHQ&rldoc=1&tbs=lrf:!2m1!1e3!2m1!1e16!3sIAE,lf:1,lf_ui:4#rlfi=hd:;si:17275164572016510107,l,ChNodWF3ZWkgc3RvcmVzIGl0YWx5IgOIAQFaDwoNaHVhd2VpIHN0b3Jlcw;mv:!1m2!1d45.5258666!2d9.274078399999999!2m2!1d45.443338999999995!2d9.1152195;tbs:lrf:!2m1!1e3!2m1!1e16!3sIAE,lf:1,lf_ui:4")
element=WebDriverWait(driver,20).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'span.fl span a span')))
print(element.text)
elements=WebDriverWait(driver,20).until(expected_conditions.presence_of_all_elements_located((By.CSS_SELECTOR,'div.Jtu6Td span')))
for ele in elements:
print(ele.text)
第一次打印将打印
127 Google reviews
第二个循环将打印3条评论以查看更多评论,您必须单击更多谷歌评论
。我认为这一部分您可以做到
Very good experience, personal are super professional and kind. I became now huawei client :)
The team is really kind and extremely prepared
Good store everything you want from Huawei.
编辑:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver=webdriver.Chrome()
driver.get("https://www.google.com/search?rlz=1C1GCEU_en__835__835&ei=gfW0XKjNFeXjkgW8g6PYDA&q=huawei%20stores%20italy&oq=huawei+stores+italy&gs_l=psy-ab.3..0i22i30l3.4596.6067..6522...1.0..0.99.530.7......0....1..gws-wiz.......0i71j0i20i263j0i67j0j33i160.QYVpoia0BL4&npsic=0&rflfq=1&rlha=0&rllag=45499827,9211657,4837&tbm=lcl&rldimm=17275164572016510107&lqi=ChNodWF3ZWkgc3RvcmVzIGl0YWx5IgOIAQFaDwoNaHVhd2VpIHN0b3Jlcw&ved=2ahUKEwiKrMm8g9PhAhXQ4KQKHY9KDc8QvS4wAXoECAoQHQ&rldoc=1&tbs=lrf:!2m1!1e3!2m1!1e16!3sIAE,lf:1,lf_ui:4#rlfi=hd:;si:17275164572016510107,l,ChNodWF3ZWkgc3RvcmVzIGl0YWx5IgOIAQFaDwoNaHVhd2VpIHN0b3Jlcw;mv:!1m2!1d45.5258666!2d9.274078399999999!2m2!1d45.443338999999995!2d9.1152195;tbs:lrf:!2m1!1e3!2m1!1e16!3sIAE,lf:1,lf_ui:4")
element=WebDriverWait(driver,20).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'span.fl span a span')))
print(element.text)
no_of_review=int(element.text.split()[0])
print(no_of_review)
elemore=WebDriverWait(driver,20).until(expected_conditions.element_to_be_clickable((By.XPATH,'//span[text()="More Google reviews"]')))
driver.execute_script("arguments[0].click();",elemore)
all_reviews = WebDriverWait(driver, 3).until(expected_conditions.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.gws-localreviews__google-review')))
while len(all_reviews) < no_of_review:
driver.execute_script('arguments[0].scrollIntoView(true);', all_reviews[-1])
WebDriverWait(driver, 1).until_not(expected_conditions.presence_of_element_located((By.CSS_SELECTOR, 'div[class$="activityIndicator"]')))
all_reviews = driver.find_elements_by_css_selector('div.gws-localreviews__google-review')
reviews = []
for review in all_reviews:
try:
full_text_element = review.find_element_by_css_selector('span.review-full-text')
reviews.append(full_text_element)
except NoSuchElementException:
full_text_element = review.find_element_by_css_selector('span[class^="r-"]')
reviews.append(full_text_element.get_attribute('textContent'))
print(reviews)
通过导入从selenium.webdriver.common.by导入
从selenium.webdriver.support.ui导入WebDriverWait
从selenium.webdriver.support导入预期的\u条件
从selenium导入webdriver
从selenium.common.Exception导入NoTouchElementException
driver=webdriver.Chrome()
司机,快("https://www.google.com/search?rlz=1C1GCEU_en__835__835&ei=gfW0XKjNFeXjkgW8g6PYDA&q=huawei%20stores%20italy&oq=huawei+stores+italy&gs_l=psy-ab.3..0i22i30l3.4596.6067..6522..1.0..0.99.530.7..0..1..gws wiz..0I71J0I20I263J0I67J0J0J33I160.QYVpoia0BL4&npsic=0&rflfq=1&rlha=0&rllag=454998279211657437&tbm=lcl&rldimm=17275164016510107&lqi=Ch2.这一研究的结果是:一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府在一个中国政府的一个中国政府的一个QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ和一个中国政府的一个中国政府和一个医生医生医生的一个中国政府的一个中国政府一个中国政府和一个中国政府的数据文件,一个中国政府的一个中国政府一个中国政府部门和一个中国政府一个中国政府一个中国政府一个中国政府的一个中国政府的一个和一个中国政府一个中国政府一个中国政府一个中国政府一个中国政府一个中国政府的文件999995!2d9.1152195;待定:lrf:!2m1!1e3!2m1!1e16!3sIAE,lf:1,lf_ui:4”)
element=WebDriverWait(driver,20).until(预期条件。element可点击((通过.CSS\u选择器,'span.fl span a span'))
打印(element.text)
no_of_review=int(element.text.split()[0])
打印(无审查)
elemore=WebDriverWait(driver,20).until(预期条件。元素可点击((By.XPATH,//span[text()=“More Google reviews”]))
驱动程序。执行_脚本(“参数[0]。单击();”,更多)
all_reviews=WebDriverWait(driver,3)。直到(预期的_条件。所有元素的存在位置((By.CSS_SELECTOR,'div.gws-localreviews_ugoogle-review'))
而len(所有审查)<无审查:
driver.execute_script('arguments[0].scrollIntoView(true);',所有_评论[-1])
WebDriverWait(驱动程序,1)。直到\u未出现(预期的\u条件。存在\u元素位于((By.CSS\u选择器,'div[class$=“activityIndicator”]))
all_reviews=driver.find_elements_by_css_selector('div.gws-localreviews_ugoogle-review'))
评论=[]
在所有联合检查组审查中进行审查:
尝试:
全文元素=审阅。通过css选择器查找元素('span.review full text')
reviews.append(全文元素)
除无任何例外:
全文元素=查看。通过css选择器(“span[class^=“r-”]”查找元素
reviews.append(全文元素。获取属性('textContent'))
印刷(评论)
您提到无法切换到包含评论的框架。您是否正在尝试删除评论文本,例如“很棒的服务,英语也不错!”!“非常好的经验,个人都非常专业和善良。“,等等?是的,我想抓取每一条评论更新问题你的确切意思是什么…每一条评论…我似乎无法编辑问题不幸的是…如果我能被展示如何根据我的问题在正确的框架内进行滚动,那么我将能够捕获评论。”。。我的问题是无法切换框架嗨,谢谢你的帮助。我尝试单击该按钮,但它不起作用:comment_button=browser。按类名称(“xwP61c”)查找元素。comment_button[0]。单击()但没有发生任何问题尝试按照代码单击“更多”按钮
elemore=WebDriverWait(driver,20)。直到(预期的条件。元素可点击((By.XPATH,//span[text()=“More Google reviews”]))驱动程序。执行脚本(“参数[0]。单击();”,elemore)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver=webdriver.Chrome()
driver.get("https://www.google.com/search?rlz=1C1GCEU_en__835__835&ei=gfW0XKjNFeXjkgW8g6PYDA&q=huawei%20stores%20italy&oq=huawei+stores+italy&gs_l=psy-ab.3..0i22i30l3.4596.6067..6522...1.0..0.99.530.7......0....1..gws-wiz.......0i71j0i20i263j0i67j0j33i160.QYVpoia0BL4&npsic=0&rflfq=1&rlha=0&rllag=45499827,9211657,4837&tbm=lcl&rldimm=17275164572016510107&lqi=ChNodWF3ZWkgc3RvcmVzIGl0YWx5IgOIAQFaDwoNaHVhd2VpIHN0b3Jlcw&ved=2ahUKEwiKrMm8g9PhAhXQ4KQKHY9KDc8QvS4wAXoECAoQHQ&rldoc=1&tbs=lrf:!2m1!1e3!2m1!1e16!3sIAE,lf:1,lf_ui:4#rlfi=hd:;si:17275164572016510107,l,ChNodWF3ZWkgc3RvcmVzIGl0YWx5IgOIAQFaDwoNaHVhd2VpIHN0b3Jlcw;mv:!1m2!1d45.5258666!2d9.274078399999999!2m2!1d45.443338999999995!2d9.1152195;tbs:lrf:!2m1!1e3!2m1!1e16!3sIAE,lf:1,lf_ui:4")
element=WebDriverWait(driver,20).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'span.fl span a span')))
print(element.text)
no_of_review=int(element.text.split()[0])
print(no_of_review)
elemore=WebDriverWait(driver,20).until(expected_conditions.element_to_be_clickable((By.XPATH,'//span[text()="More Google reviews"]')))
driver.execute_script("arguments[0].click();",elemore)
all_reviews = WebDriverWait(driver, 3).until(expected_conditions.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.gws-localreviews__google-review')))
while len(all_reviews) < no_of_review:
driver.execute_script('arguments[0].scrollIntoView(true);', all_reviews[-1])
WebDriverWait(driver, 1).until_not(expected_conditions.presence_of_element_located((By.CSS_SELECTOR, 'div[class$="activityIndicator"]')))
all_reviews = driver.find_elements_by_css_selector('div.gws-localreviews__google-review')
reviews = []
for review in all_reviews:
try:
full_text_element = review.find_element_by_css_selector('span.review-full-text')
reviews.append(full_text_element)
except NoSuchElementException:
full_text_element = review.find_element_by_css_selector('span[class^="r-"]')
reviews.append(full_text_element.get_attribute('textContent'))
print(reviews)