点击 python/selenium/phantomjs 按钮
clicking button with python/selenium/phantomjs
我正在尝试使用 python 3.5/selenium/phantomjs.
的组合来抓取 this
有一个加载更多优惠的按钮
<button data-behavior="result-paging" class="button button-text--centered">
Mehr laden
</button>
这个按钮在 HTML-代码中出现了两次,如果列出了所有优惠,第一个按钮如下所示,而第二个按钮保持不变:
<button data-behavior="result-paging" class="button button-text--centered is-hidden">
Mehr laden
</button>
点击我试过的第一个按钮:
while True:
try:
time.sleep(4)
btnElements = driver.find_elements_by_xpath("//button[@data-behavior='result-paging']")
for btnElement in btnElements:
btnElement.click()
# btnElement.send_keys("\n")
if i==11:
break
else:
i=i+1
except:
break
和
while True:
try:
time.sleep(4)
elements= driver.find_elements_by_xpath("//button[@data-behavior='result-paging']")
driver.execute_script("arguments[0].click();", elements[0])
if i==11:
break
else:
i=i+1
except:
break
循环只是为了快速测试目的,否则脚本将永远 运行。使用 booth approaches 没有加载新内容,因此点击无效。
有没有人知道如何解决这个问题(执行点击并加载其他报价)?
编辑:
显然这个问题是由 phantomjs 引起的,因为我可以 运行 使用 chromedriver 的相同脚本。不幸的是我需要 运行 phantomjs。有人以前经历过这种行为吗?
根据您的代码块,您已将 定位器策略 用作 ...
find_elements_by_xpath("//button[@data-behavior='result-paging']")
... 没有将 visible 按钮的文本唯一地标识为 Mehr laden。
解决方案
要将带有文本的可见按钮识别为 Mehr laden,您可以使用以下任一 定位器策略:
CSS_SELECTOR :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# lines of code
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[data-psa-scope=tarifflist] button.button.button-text--centered"))).click()
XPATH :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
# lines of code
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@data-psa-scope='tarifflist']//button[@class='button button-text--centered']"))).click()
我正在尝试使用 python 3.5/selenium/phantomjs.
的组合来抓取 this有一个加载更多优惠的按钮
<button data-behavior="result-paging" class="button button-text--centered">
Mehr laden
</button>
这个按钮在 HTML-代码中出现了两次,如果列出了所有优惠,第一个按钮如下所示,而第二个按钮保持不变:
<button data-behavior="result-paging" class="button button-text--centered is-hidden">
Mehr laden
</button>
点击我试过的第一个按钮:
while True:
try:
time.sleep(4)
btnElements = driver.find_elements_by_xpath("//button[@data-behavior='result-paging']")
for btnElement in btnElements:
btnElement.click()
# btnElement.send_keys("\n")
if i==11:
break
else:
i=i+1
except:
break
和
while True:
try:
time.sleep(4)
elements= driver.find_elements_by_xpath("//button[@data-behavior='result-paging']")
driver.execute_script("arguments[0].click();", elements[0])
if i==11:
break
else:
i=i+1
except:
break
循环只是为了快速测试目的,否则脚本将永远 运行。使用 booth approaches 没有加载新内容,因此点击无效。
有没有人知道如何解决这个问题(执行点击并加载其他报价)?
编辑:
显然这个问题是由 phantomjs 引起的,因为我可以 运行 使用 chromedriver 的相同脚本。不幸的是我需要 运行 phantomjs。有人以前经历过这种行为吗?
根据您的代码块,您已将 定位器策略 用作 ...
find_elements_by_xpath("//button[@data-behavior='result-paging']")
... 没有将 visible 按钮的文本唯一地标识为 Mehr laden。
解决方案
要将带有文本的可见按钮识别为 Mehr laden,您可以使用以下任一 定位器策略:
CSS_SELECTOR :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # lines of code WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[data-psa-scope=tarifflist] button.button.button-text--centered"))).click()
XPATH :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # lines of code WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@data-psa-scope='tarifflist']//button[@class='button button-text--centered']"))).click()