以下用于调整 selenium chrome 窗口大小的代码不起作用:
driver.set_window_size(1920, 1080)
time.sleep(5)
size = driver.get_window_size()
print("Window size: width = {}px, height = {}px.".format(size["width"], size["height"]))
Run Code Online (Sandbox Code Playgroud)
其输出为:
Window size: width = 1044px, height = 788px
Run Code Online (Sandbox Code Playgroud)
我还尝试使用选项来设置驱动程序创建时的窗口大小(以及许多其他内容,参见下面的评论),但也无法使其工作:
options.add_argument("--window-size=1920,1080")
Run Code Online (Sandbox Code Playgroud)
我正在使用 selenium 3.14.0,chrome 驱动程序版本 72.0.3626.109 并在后台/无头模式下运行:我确实需要在后台运行我的代码,这意味着它会在后台自动启动。我认为无头(启动时与特定用户相关联)和背景(也是无头但可能不与特定用户相关联并且可能有其他特质)之间存在细微的区别 - 我开始认为这可能成为我的问题的一部分。
我想让 chrome 驱动程序工作,因为 firefox 不在后台运行(我需要),而 ie 很痛苦。
我想解决这个问题,因为当窗口很小时我看不到需要单击的元素。
python selenium google-chrome selenium-chromedriver google-chrome-headless
因此,我有以下在本地正常工作的 Selenium Chrome Webdriver 进程。基本上,当运行以下代码时,会通过 Best Buy 进行购买,并且会从我的 Twilio 电话号码向我发送一条 SMS 消息,指示购买是否成功。全部大写的变量已经定义。我也没有包括进口。同样,以下代码在本地运行时使购买成功。这意味着我从 Twilio 电话号码收到的 SMS 消息包含“成功!” 每次在本地运行以下代码:
client = Client(ACCOUNT_SID, AUTH_TOKEN)
def runBestBuyBotLocal():
driver = webdriver.Chrome()
driver.get("https://www.bestbuy.com/site/spongebob-squarepants-mini-plush-styles-may-vary/6404213.p?skuId=6404213")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html/body[@class='size-l']/div[@class='pl-page-content']//div[@class='container-v2']/div[@class='row v-m-bottom-g']/div[2]//div[@class='col-xs-12']/div[6]/div[@class='None']/div/div/div/button[@type='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='c-portal']/div[@role='dialog']/div[1]/div[@role='dialog']/div[@role='document']//a[@role='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='cartApp']/div[@class='page-spinner page-spinner--out']/div[@class='large-view size-l']//div[@class='fluid-large-view']//section[@class='fluid-large-view__sidebar']//button[@type='button']")))
element.send_keys(Keys.RETURN)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-e']")))
element.send_keys(EMAIL)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='fld-p1']")))
element.send_keys(PASSWORD)
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//div[@class='cia-app-container']/div[@class='cia-actual-full-page-wrapper lv']/section/main[@class='cia-wrapper container']//form/div[3]/button")))
element.send_keys(Keys.RETURN)
driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']"))))
element = wait.until(EC.presence_of_element_located((By.XPATH, "/html//input[@id='credit-card-cvv']")))
element.send_keys(CVV)
driver.execute_script("arguments[0].scrollIntoView(true);", WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "/html//div[@id='checkoutApp']/div[@class='page-spinner page-spinner--out']/div[1]/div[1]//div[@class='checkout__container …Run Code Online (Sandbox Code Playgroud) python selenium heroku selenium-chromedriver google-chrome-headless
当我抓取包含使用无头选项的产品的页面时,我得到不同的结果。
对于同一问题,一次我得到的结果未排序,另一次得到正确排序的结果。
硒火狐浏览器:
firefox_options = Options()
firefox_options.headless = True
browser = webdriver.Firefox(options=firefox_options, executable_path=firefox_driver)
Run Code Online (Sandbox Code Playgroud)
根据这篇文章:
“当使用无头选项时,Firefox 不会发送不同的标头”。
如何使用无头选项从抓取中获得恒定的结果?
更新:
事实证明,广告弹出窗口隐藏了价格排序菜单。通过设置DebanjanB发布的恒定窗口大小,问题得到了解决。
感谢您的任何建议
python selenium headless-browser geckodriver firefox-headless
我已经查看并尝试了几乎所有关于此主题的其他帖子,但都没有成功。
我正在使用,python 3.6所以我正在使用以下 AMI amzn-ami-hvm-2018.03.0.20181129-x86_64-gp2(请参阅此处)。通过 SSH 连接到我的 EC2 后,我使用以下命令下载 Chrome:
sudo curl https://intoli.com/install-google-chrome.sh | bash
cp -r /opt/google/chrome/ /home/ec2-user/
google-chrome-stable --version
# Google Chrome 86.0.4240.198
Run Code Online (Sandbox Code Playgroud)
并下载并解压缩匹配的 Chromedriver:
sudo wget https://chromedriver.storage.googleapis.com/86.0.4240.22/chromedriver_linux64.zip
sudo unzip chromedriver_linux64.zip
Run Code Online (Sandbox Code Playgroud)
我安装python36并selenium使用:
sudo yum install python36 -y
sudo /usr/bin/pip-3.6 install selenium
Run Code Online (Sandbox Code Playgroud)
然后运行脚本:
import os
import selenium
from selenium import webdriver
CURR_PATH = os.getcwd()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--remote-debugging-port=9222') …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我正在使用 java 和 selenium。在 UI 模式下测试工作正常。但是在无头模式下我收到此错误
org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <label _ngcontent-yrc-c26="" formcontrolname="reportingDealPermission" nz-checkbox="" class="ant-checkbox-wrapper ng-untouched ng-pristine ng-valid" ng-reflect-name="reportingDealPermission">...</label> is not clickable at point (161, 562). Other element would receive the click: <div _ngcontent-yrc-c26="" class="footer">...</div>
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题(在 UI 模式下工作)。这是我的代码
WebDriver driver = getWebDriver();
WebElement element;
Thread.sleep(60000);
element = driver.findElement(By.xpath("//label[@formcontrolname='reportingDealPermission']"));
element.click();
Run Code Online (Sandbox Code Playgroud)
为什么在 selenium 中没有移动到元素并打破所有层的操作。这是用户界面。这是在 UI 模式下工作,而不是在无头模式下工作,睡眠了 6 分钟但没有解决,所以这不是时间问题